7

1 つのビューに 2 つのデータグリッドがありますが、これらのデータグリッドの ItemsSource であるコレクションは異なるビュー モデルにあります。これら 2 つのデータグリッドを 2 つの異なるビュー モデルのコレクションにバインドすることは可能ですか?

4

3 に答える 3

10

両方を組み合わせたビューモデルを探してください:

public class ViewModelA {
    public ObservableCollection<CustomClass> Items { get; set; }
    /* properties, etc. */
}

public class ViewModelB {
    /* properties, etc. */
}

public class CombiningViewModel {
    public ViewModelA A { get; set; }
    public ViewModelB B { get; set; }
}

バインディングは次のように行うことができます

<DataGrid ItemsSource="{Binding A.Items}">
    <!-- Sample, not complete -->
</DataGrid>
于 2012-05-28T09:01:14.730 に答える
2

いいえ、直接ではありません。ただし、オプションがあります。

ビューの DataCONtext をそれ自体に設定し、個別のプロパティを介して各ビューモデルを公開し、それらのプロパティにバインドできます。

public class MyView : Window 
{
    public MyView()
    {
        this.DataContext = this;
    }

    public ViewModel1 FirstViewModel { get; set; }

    public ViewModel2 SecondViewModel { get; set; }

}

または、ビューモデルの 1 つを拡張 (継承) するか、両方をラップして適切なプロパティを表示するラッパー ビューモデルを作成することもできます。

public class MyCompositeViewModel
{
    public ViewModel1 FirstViewModel { get; set; }

    public ViewModel2 SecondViewModel { get; set; }
}
于 2012-05-28T09:03:56.117 に答える
0

コンテナー ビューではなく、DataGrid ごとに DataContext を設定できます。

<Grid>
   <DataGrid ... DataContext="..." />
   <DataGrid ... DataContext="..." />
</Grid>

または、モデルに直接 DataContext と Bind を使用しないでください

<DataGrid ItemsSource="{Binding Source={StaticResource ...}}" />
于 2012-05-28T09:00:02.183 に答える