2009-04-08 10 views
0

私は2つのUserControlを作成しました。最初のものはオブジェクトのリストを表示し、2番目のものは最初から選択されたオブジェクトに関する詳細を表示します。最初のコントロールに依存プロパティを作成し、各UserControlをResourcesコレクションで宣言されたオブジェクトにバインドしています。私はこれを記述するブログ記事を見たことがあるが、それを働かせるようには見えない。私はXamlParseExceptionを取得しています。面白いのは、私の最初のUserControlsでバインディングMode = TwoWayを設定した場合にのみ例外が発生することです。ここでは、コード...XamlParseExceptionの原因となる依存プロパティー

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

大きな説明。ありがとう! –

関連する問題