そのコレクションに特別な新しいビュー モデル (またはモデル) に基づいて、ビュー モデル レベルで形成された新しいコレクションを返すことが最善の方法です。
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>
このコレクションを監視可能にする必要があるかどうかは、使用するかどうかを選択できます。
- ビューモデルを展開して
ClassA
およびClassB
コレクションをサブスクライブすることもできます。これにより、どちらかが変更されたときにメイン コレクションを更新できます。
いずれにせよ、これにより、コードに合わせていくつかの小さな調整を加えて、進むべき方向についての良いアイデアが得られるはずです.