View可以将两个View Models作为其数据上下文吗?

时间:2012-05-28 08:54:23

标签: wpf xaml binding

我在一个视图中有两个数据网格,但这些数据网格的ItemsSource的集合位于不同的视图模型中。那么可以将这两个数据网格与两个不同的视图模型中的集合绑定在一起吗?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

不,不是直接的。你确实有选择:

您可以将视图的DataCOntext设置为自身,然后通过单独的属性公开每个viewmodel并绑定到这些属性:

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

    public ViewModel1 FirstViewModel { get; set; }

    public ViewModel2 SecondViewModel { get; set; }

}

或者您可以创建一个包装器视图模型,该视图模型可以扩展(继承)其中一个视图模型,也可以将它们包装起来并显示相应的属性:

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

    public ViewModel2 SecondViewModel { get; set; }
}

答案 2 :(得分:0)

您可以为每个DataGrid而不是容器视图设置DataContext。

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

或者不要使用DataContext并直接绑定到模型

<DataGrid ItemsSource="{Binding Source={StaticResource ...}}" />