2012-01-31 68 views
2

我目前正在用MVVM模式写一个用户控件,它有一些属性,例如文件。如何在XAML中访问ViewModel的DependencyProperties?

的DependencyProperty在其中使用了用户控制

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

我如何使用我的财产 “一号文件” 从视图模型绑定它们在XAML对视图模型

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例如,MainView中的ListBox的选定项目?

Programmaticly。我可以在我的用户控件的代码隐藏中编写一个方法,但是我认为这不是实现这一目标的美丽方法。特别是关于使用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的集合吗?如果是的话,你可以绑定你的UserControl到选定的“文档”:

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

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

编辑:塞尔的回答是关于MVVM更好。将选定的项目作为ViewModel上的一个属性。

0

您需要将文件属性设置为属性绑定在你的视图模型:

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

而在你的ViewModel:

public MyDocument VmDocument {get;set;} 

当然,VmDocument需要提高其二传手PropertyChanged事件。

相关问题