7

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

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; }

}

或者,您可以创建一个包装器视图模型,它要么扩展(继承)其中一个视图模型,要么将它们都包装起来并呈现适当的属性:

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 并直接绑定到模型

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