代码之家  ›  专栏  ›  技术社区  ›  ChrisBD

MVVM和DataGrid视图作为嵌入控件在具有子集数据的otherview中重用

  •  0
  • ChrisBD  · 技术社区  · 14 年前

    我有几个视图展示了一个datagrid,它显示了一些可观察集合的内容,例如。

    ObservableCollection<ClassAViewModel> sourceA;
    ObservableCollection<ClassBViewModel> sourceB;
    ObservableCollection<ClassCViewModel> sourceC;
    

    集合由对数据访问层的调用填充。使用包含绑定到适当集合的datagrid的Usercontrol,我可以很容易地显示这些数据。 我有

    • ClassAView ClassAViewModel 到 单板控制显示 ClassA 数据,
    • ClassBView ClassBViewModel 到 单板控制显示 ClassB 数据
    • ClassCView ClassCViewModel 到 单板控制显示 ClassC 数据

    我还有:

    • AllClassAView AllClassAViewModel 显示包含数据的DataGrid 甲级 实例。
    • AllClassBView AllClassBViewModel 显示包含数据的DataGrid 关于所有的

    现在说吧 甲级 B类 C类

    <DataTemplate DataType="x:Type vm:ClassAViewModel}">
      <vw:ClassAView/>
    </DataTemplate>
    

    现在我想做的是使用 ClassAView公司 显示 B类 与之相关的实例。

    我可以重复使用 所有ClassB视图 UserControl以显示 B类 可观察的收集和做这件事的最好方法是什么?

    我不想在 ClassAView.cs公司 文件只在 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);
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   ChrisBD    14 年前

    我的问题可能不是很清楚。

    我不知道我的解决方案是否是好的做法。

    我做了如下工作:

    AllClassBViewModel ClassBViewModels 对那些与 ClassA

    public ulong ClassA_Id{get;set;}
    

    所以现在当 ClassB视图模型

    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);
    

    我向ClassAViewModel添加了AllClassBViewModel类型的属性和字段。

    private AllClassBViewModel fieldAllClassBViewModel;
    public AllClassBViewModel AllClassBVM{get{return this.fieldAllClassBViewModel;}}
    

    AllClassBView 进入 ClassAView 将数据上下文绑定到 AllClassBVM 内的财产 ClassAViewModel .

    <vw:AllClassBView DataContext="{Binding AllClassBVM}"/>
    

    不,我要做的就是检查命令绑定。