好的,情況如下。淨4 WPF沒有Silverlight。MVVM和DataGrid視圖在子集數據的其他視圖中重新用作嵌入式控件
我有幾個視圖呈現一個數據網格,顯示一些可觀察集合的內容,例如
ObservableCollection<ClassAViewModel> sourceA;
ObservableCollection<ClassBViewModel> sourceB;
ObservableCollection<ClassCViewModel> sourceC;
集合通過調用數據訪問層來填充。我可以很容易地用一個包含綁定到相應集合的數據網格的用戶控件來顯示這些數據。 我有
ClassAView
和ClassAViewModel
到 控制顯示單ClassA
數據,ClassBView
和ClassBViewModel
到 控制顯示單ClassB
數據ClassCView
和ClassCViewModel
到 控制顯示單ClassC
數據的
我也有:
AllClassAView
和AllClassAViewModel
顯示與關於所有ClassA
實例數據 一個數據網格。AllClassBView
和AllClassBViewModel
顯示與關於所有ClassB
實例數據 一個數據網格。等
現在說ClassA
包含ClassB
集合的子集和ClassC
集合的子集等
在我的資源文件,我已綁定了的ViewModels並將他們的意見一起按照以下方式(vm和vw是它們所在的命名空間):
<DataTemplate DataType="x:Type vm:ClassAViewModel}">
<vw:ClassAView/>
</DataTemplate>
現在w我希望做的帽子是使用ClassAView
中的AllClassBView
或AllClassBViewModel
來顯示與其相關的ClassB
實例的子集。
調用此數據的最佳方式是什麼?
我可以重新使用AllClassBView
UserControl來顯示ClassB
ObservableCollection的子集,以及執行此操作的最佳方法是什麼?
我不想把任何代碼ClassAView.cs內僅在ClassAView.xaml或ClassAViewModel文件。
我應該只是添加一個新的屬性到AllClassBView並使用它來過濾列表?例如內ClassBViewModel在哪裏產生ClassBViewModels的列表(在DataGrid中使用),我可以使用:
if(this.ClassA_Id!=0)
{
List<ClassBViewModel> all = (from ClassB in this.DataRepository.GetClassBs().Where(x=>x.ClassA_Id == this.ClassA_Id) select new ClassBViewModel()).ToList();
}
else
{
List<ClassBViewModel> all = (from ClassB in this.DataRepository.GetClassBs() select new ClassBViewModel()).ToList();
}
this.sourceB= new ObservableCollection<ClassBViewModel>(all);