0

各ビューモデルに観察可能なコレクションを持つ2つのビューモデルがあります。これらのコレクションは互いに関連しています。たとえば、1 つは Id と Name を持つ ClassA のコレクションであり、もう 1 つは 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>

私の質問の説明であなたをあまり混乱させなかったことを願っています:)

4

1 に答える 1

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>このコレクションを監視可能にする必要があるかどうかは、使用するかどうかを選択できます。
  • ビューモデルを展開してClassAおよびClassBコレクションをサブスクライブすることもできます。これにより、どちらかが変更されたときにメイン コレクションを更新できます。

いずれにせよ、これにより、コードに合わせていくつかの小さな調整を加えて、進むべき方向についての良いアイデアが得られるはずです.

于 2013-01-23T12:06:10.540 に答える