2013-01-23 89 views
0

我有兩個viewmodels在每個視圖模型中有一個observablecollection。 這些集合有相互關係。 例如,假設一個是具有Id和Name的ClassA的集合,另一個是具有ClassAId和一些OtherValue的ClassB的集合是否可以將這些數據綁定到ListView,以便對於CollectionA中的每個項目OtherValue是CollectionB與來自兩個視圖模型的數據的列表視圖

<ListView ItemsSource="{Binding ViewModelA.CollectionClassA}"> 
     <ListView.View> 
      <GridView>        
      <GridViewColumn DisplayMemberBinding="{Binding Path=ClassA.Name}"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Path=ClassB.OtherValue}"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

牽強我希望我沒有混淆你得多跟我,我的問題:)

+0

你真的嘗試過嗎?怎麼了? – RhysW

+0

我不知道如何獲得CollectionB綁定,因爲它在其他數據環境中 – Peter

+0

因此,您需要一個包含A和B的包裝,然後將其用作項目源? – RhysW

回答

1

的解釋你最好的選擇是,以返回在形成一個新的集合基於特定於該集合的新視圖模型(或模型)的視圖模型級別:

public class OtherViewModel 
{ 
    //Expand these if you want to make it INPC 
    public int Id { get; private set; } 
    public string Name { get; private set; } 
    public Foo OtherValue { get; private set; } 
} 

public class MainViewModel 
{ 
    // Somewhere in MainViewModel, create the collection 
    ObservableCollection<OtherViewModel> CreateCollection(ICollection<ClassA> a, ICollection<ClassB> b) 
    { 
     var mix = a.Join(b, a => a.Id, b => b.Id, 
      (a, b) => new OtherViewModel { Id = a.Id, Name = a.Name, OtherValue = b.OtherValue }); 

     return new ObservableCollection<OtherViewModel>(mix); 
    } 

    // Expose the collection (possibly INPC if needed) 
    public ObservableCollection<OtherViewModel> MixedCollection { get; private set; } 
} 

XAML:

<!-- Assuming the DataContext is MainViewModel --> 
<ListView ItemsSource="{Binding MixedCollection}"> 
    <ListView.View> 
    <GridView>        
     <GridViewColumn DisplayMemberBinding="{Binding Path=Name}"/> 
     <GridViewColumn DisplayMemberBinding="{Binding Path=OtherValue}"/> 
    </GridView> 
    </ListView.View> 
</ListView> 

注意事項:

  • 您可以選擇使用ObservableCollection<T>與否,就看你是否需要此集合可觀察到。
  • 您還可以展開您的視圖模型以訂閱ClassAClassB集合,以便在它們中的任何一個更改時更新您的主集合。

無論哪種方式,這應該給你一個很好的想法,進行一些小的調整,以適應你的代碼。

+0

我會試試這個 – Peter

相關問題