2009-04-08 80 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