我正在使用Prism来创建一个新的应用程序。有几个查找列表将在应用程序的几个地方使用。因此,有必要定义一次,并在需要该功能的任何地方使用该功能。我目前的解决方案是使用类型化数据模板来呈现内容控件中的控件。MVVM模式和嵌套视图模型 - 通信和查找列表
<DataTemplate DataType={x:Type ListOfCountriesViewModel}>
<ComboBox ItemsSource={Binding Countries} SelectedItem="{Binding SelectedCountry"/> </DataTemplate>
<DataTemplate DataType={x:Type ListOfRegionsViewModel}>
<ComboBox ItemsSource={Binding Countries} SelectedItem={Binding SelectedRegion} /> </DataTemplate>
public class ParentViewModel
{
SelectedCountry get; set;
SelectedRegion get; set;
ListOfCountriesViewModel CountriesVM;
ListOfRegionsViewModel RgnsVM;
}
然后在我的窗口,我有2个内容控件和控件的其余
<ContentControl Content="{Binding CountriesVM}"></ContentControl>
<ContentControl Content="{Binding RgnsVM}"></ContentControl>
<Rest of controls on view>
在我有这个工作,并为组合框的SelectedItems通过EventAggregator从publising事件的时刻然后在父视图模型中订阅的子视图模型。
我不确定这是最好的方式,因为我可以想象我会很快结束很多事件,它将变得笨拙。另外,如果我要在另一个窗口上使用相同的视图模型,它将发布该事件,并且此父视图模型已订阅该模型,这可能会产生意想不到的后果。
我的问题是: -
- 这是把查找列表在各种屏幕上可重复使用的视图的最佳方式?
- 如何使其绑定到子视图模型的组合框在父视图模型上设置相关属性而不使用事件/介体。例如在这种情况下,SelectedCountry例如?
- 我想要做什么的替代实施建议?
我有一种感觉,我失去了一些东西明显,有这么多的信息,很难知道什么是正确的所以任何帮助将是非常感激地接受。