2011-05-20 127 views
1

我有一個頁面有三個子UserControls。我在父頁面中設置了DataContext viewmodel資源,並且三個子控件引用父級DataContext,因爲所有3個子控件都使用相同的ViewModel。都好。Xaml無法找到綁定

但是,其中一個UserControl存在綁定問題(我可以看到這是因爲Silverlight 5 Beta中的新XAML調試功能。)所討論的UserControl是ItemsControl。每個項目內有一個按鈕和2個文本框。該按鈕綁定到一個命令。錯誤是Button找不到它的綁定。 2個文本框綁定正確。 ItemsControl的ItemSource綁定到視圖模型中的ObservableCollection。我怎麼能告訴Button尋找它的綁定「在一個更高的層次」比Observable Collection ie:轉到視圖模型,而不是你的直接父(Observable Collection)。您無法爲ChildControl中的按鈕設置DataContext,因爲對視圖模型的引用不存在。它在父母身上。

+0

您提到了Silverlight 5,但是您已經標記了您定位的Silverlight 4,它在這種情況下有所不同。 – AnthonyWJones 2011-05-21 12:25:09

回答

0

您應該能夠使用的RelativeSource綁定到你的ViewModel

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}, 
     Path=DataContext.MyButtonCommand} 
+0

OK - 試過了,XAML在AncestorType = {x:Type ItemsControl}上顯示名稱空間錯誤,表示x:Type上缺少組件引用。你知道那是什麼裝配嗎? – Greg 2011-05-20 16:33:47

+0

根據我的頁面中已經引用的PresentationFramework.dll中的文檔:xmlns =「http://schemas.microsoft.com/winfx/2006/xaml/presentation」 – Greg 2011-05-20 16:41:21

+0

完整的錯誤是:(1)屬性「AncestorType」不存在於XML名稱空間'http://schemas.microsoft.com/winfx/2006/xaml/presentation'(2)中的'RelativeSource'類型上'property type'AncestorType'not found in type' RelativeSource'(3)未找到類型'x:Type'。驗證您是否缺少程序集引用,並且所有引用的程序集都已構建。 – Greg 2011-05-20 16:46:46

1

試試這個: -

給您ItemsControl的一個名字。在您的按鈕綁定中包含ElementName=NameOfItemsControl,以DataContext.作爲綁定路徑的前綴。

0

我已經將我所有的SL5項目移回SL4。 SL5的新XAML調試功能不超過幾天,並且現在永久殘廢,導致無法找到PDB的錯誤。我會建議任何開發大型項目的人遠離SL5,直到經過測試和證明,否則你最終會浪費大量時間來分析SL5產生的奇怪錯誤。