我正在使用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例如?
- 我想要做什麼的替代實施建議?
我有一種感覺,我失去了一些東西明顯,有這麼多的信息,很難知道什麼是正確的所以任何幫助將是非常感激地接受。