2010-09-22 10 views
0

好的,情況如下。淨4 WPF沒有Silverlight。MVVM和DataGrid視圖在子集數據的其他視圖中重新用作嵌入式控件

我有幾個視圖呈現一個數據網格,顯示一些可觀察集合的內容,例如

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

集合通過調用數據訪問層來填充。我可以很容易地用一個包含綁定到相應集合的數據網格的用戶控件來顯示這些數據。 我有

  • ClassAViewClassAViewModel到 控制顯示單ClassA 數據,
  • ClassBViewClassBViewModel到 控制顯示單ClassB數據
  • ClassCViewClassCViewModel到 控制顯示單ClassC數據的

我也有:

  • AllClassAViewAllClassAViewModel 顯示與關於所有ClassA實例數據 一個數據網格。
  • AllClassBViewAllClassBViewModel 顯示與關於所有ClassB實例數據 一個數據網格。

現在說ClassA包含ClassB集合的子集和ClassC集合的子集等

在我的資源文件,我已綁定了的ViewModels並將他們的意見一起按照以下方式(vm和vw是它們所在的命名空間):

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

現在w我希望做的帽子是使用ClassAView中的AllClassBViewAllClassBViewModel來顯示與其相關的ClassB實例的子集。

調用此數據的最佳方式是什麼?

我可以重新使用AllClassBView UserControl來顯示ClassB ObservableCollection的子集,以及執行此操作的最佳方法是什麼?

我不想把任何代碼ClassAView.cs內僅在ClassAView.xamlClassAViewModel文件。

我應該只是添加一個新的屬性到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); 

回答

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

我加了屬性和現場我ClassAViewModel那名AllClassBViewModel類型。

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

我然後加入一個條目到AllClassBViewClassAView該有內ClassAViewModel綁定到AllClassBVM屬性數據上下文。

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

沒有我所要做的就是檢查命令綁定。

相關問題