2009-04-08 39 views
0

我創建了兩個UserControls,其中第一個顯示對象列表,第二個顯示對象的詳細信息,第一個選擇對象。我在第一個控件上創建了一個依賴項屬性,並將每個UserControl綁定到在我的資源集合中聲明的對象。我已經看過描述這個的博客文章,但似乎無法使其發揮作用。我得到一個XamlParseException。有趣的是隻有當我在我的第一個UserControls上設置綁定Mode = TwoWay時纔會發生異常。下面的代碼...引起XamlParseException的依賴項屬性AG_E_PARSER_BAD_PROPERTY_VALUE

Page.xaml

<UserControl.Resources> 
    <local:Item x:Key="SelectedItem" /> 
</UserControl.Resources> 

... 

<controls:ItemList 
    SelectedItem="{Binding Mode=TwoWay, Source={StaticResource SelectedItem}}">      
</controls:ItemList > 

... 

<controls:ItemDetails 
    DataContext="{Binding Source={StaticResource SelectedItem}}">      
</controls:ItemDetails> 

ItemList.xaml.cs

public partial class ItemList: UserControl 
{ 
    public ItemList() 
    { 
     InitializeComponent(); 
    } 

    public static readonly DependencyProperty SelectedItemProperty = 
     DependencyProperty.Register("SelectedItem", typeof(Item), typeof(ItemList), new PropertyMetadata(new Item())); 
    public Item SelectedItem 
    { 
     get { return (Item)GetValue(SelectedItemProperty); } 
     set { SetValue(SelectedItemProperty , value); } 
    } 

任何建議,歡迎!

回答

2

從外觀上看,您的Xaml不正確。您錯過了需要綁定到雙向的屬性。你在說你想綁定到源代碼中定義的對象,但是你沒有指定該資源的屬性來綁定。在這種情況下,SelectedItem資源是類型爲Item的對象...,您需要綁定到Item的屬性。因此,如果項目有一個屬性命名值,XAML中看起來是這樣的:

SelectedItem="{Binding Value, Source={StaticResource SelectedItem}, Mode=TwoWay}" 

試試這個:

SelectedItem="{Binding SelectedItem, Mode=TwoWay}"  

IB。

+0

很好的解釋。謝謝! – 2009-04-10 13:51:23