好的,这是情况。 Net 4 WPF没有Silverlight。
我有几个视图提供了一个数据网格,显示了一些可观察集合的内容,例如
ObservableCollection<ClassAViewModel> sourceA;
ObservableCollection<ClassBViewModel> sourceB;
ObservableCollection<ClassCViewModel> sourceC;
通过调用数据访问层来填充集合。我可以使用包含绑定到相应集合的数据网格的Usercontrol轻松地显示此数据。 我有
ClassAView
和ClassAViewModel
来
控制单ClassA
的显示
数据,ClassBView
和ClassBViewModel
来
控制单个ClassB
数据的显示ClassCView
和ClassCViewModel
来
控制单个ClassC
数据的显示我也有:
AllClassAView
和AllClassAViewModel
显示带有数据的DataGrid
与所有ClassA
个实例相关。 AllClassBView
和AllClassBViewModel
显示带有数据的DataGrid
与所有ClassB
个实例相关。
等
现在说ClassA
包含ClassB
集合的子集和ClassC
集合的子集等。
在我的资源文件中,我以下列方式将ViewModels及其视图绑定在一起(vm和vw是它们所在的命名空间):
<DataTemplate DataType="x:Type vm:ClassAViewModel}">
<vw:ClassAView/>
</DataTemplate>
现在我希望做的是在AllClassBView
中使用AllClassBViewModel
或ClassAView
来显示与其相关的ClassB
个实例的子集。
调用此数据的最佳方法是什么?
我可以重新使用AllClassBView
UserControl来显示ClassB
ObservableCollection的子集吗?这样做的最佳方式是什么?
我不想在 ClassAView.xaml 或 ClassAViewModel 中的 ClassAView.cs 文件中放置任何代码。
我应该只是向AllClassBView添加一个新属性并使用它来过滤列表吗?例如,在我生成ClassBViewModel列表的ClassBViewModel中(在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);
答案 0 :(得分:0)
我已经破解了它。
我的问题可能不太清楚。
我的解决方案是否是良好的做法,我不知道。
我所做的如下:
我在AllClassBViewModel
中添加了一个额外的属性,允许我将ClassBViewModels
的列表过滤为与ClassA
相关的列表。
public ulong ClassA_Id{get;set;}
现在当AllClassBViewModel
构建其ClassBViewModels
列表时,它现在可以通过以下方式过滤它们:
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);
我在属于AllClassBViewModel类型的ClassAViewModel中添加了一个属性和字段。
private AllClassBViewModel fieldAllClassBViewModel;
public AllClassBViewModel AllClassBVM{get{return this.fieldAllClassBViewModel;}}
然后我将AllClassBView
的条目添加到ClassAView
中,该条目的数据上下文绑定到AllClassBVM
中的ClassAViewModel
属性。
<vw:AllClassBView DataContext="{Binding AllClassBVM}"/>
我所要做的就是检查命令绑定。