2012-01-31 5 views
2

私は現在、いくつかのプロパティを持つMVVMパターンを持つユーザーコントロールを作成しています。資料。ユーザーコントロールを使用するViewModelにXAMLでViewModelのDependencyPropertiesにアクセスするにはどうすればよいですか?

public static readonly DependencyProperty DocumentProperty = DependencyProperty.Register("Document", typeof(MyDocument), typeof(ResultControlViewModel), new PropertyMetadata(OnDocumentChanged)); 

     public MyDocument Document 
     { 
      get { return (MyDocument)GetValue(DocumentProperty); } 
      set { SetValue(DocumentProperty, value); } 
     } 

MAINVIEW

<control:ResultControl x:Name="myControl" /> 

どのように私は、XAMLに対して、それらをバインドするためのViewModelから私の財産 "ドキュメント" を使用することができますで

たDependencyPropertyたとえば、MainView内のListBoxの選択項目は?

Programmaticlly。私は自分のユーザコントロールのコードビハインドにメソッドを書くことができますが、これを行うには美しい方法ではないと思います。特にMVVMパターンの使用に関して。

答えて

1

MainViewModelクラスはドキュメントとドキュメント(すなわち、現在のドキュメント)の性質を持っていると仮定すると、XAMLは次のようになります。

<ListBox ItemsSource={Binding Path=Documents}, SelectedItem={Binding Path=Document}> 
... 
</ListBox> 

<control:ResultControl DataContext={Binding Path=Document, Mode=OneWay} /> 
0

私はあなたが後にしているものはかなりよく分かりません。 ListBoxが "Document" ViewModelsのコレクションであることを意味しますか?

<ListBox x:Name="MyListBox" ItemsSource="{Binding MyDocumentCollection}" /> 

<control:ResultControl x:Name="myControl" DataContext={Binding ElementName="MyListBox", Path="SelectedItem"}/> 

EDIT:セルジュの答えはMVVMへに関して優れているので、場合あなたが選択した「ドキュメント」にユーザーコントロールをバインドすることができます。選択した項目をViewModelのプロパティとして持つ。

<control:ResultControl x:Name="myControl" Document="{Binding VmDocument}"/> 

そして、あなたのViewModelに:

0

はあなたのviewmodelに宿泊施設へのDocumentプロパティをバインドする必要があります。もちろん、

public MyDocument VmDocument {get;set;} 

は、VmDocumentはそのセッターにPropertyChangedイベントを調達する必要があります。

関連する問題