【发布时间】:2012-06-02 15:45:09
【问题描述】:
我在一个视图中有两个数据网格,但作为这些数据网格的 ItemsSource 的集合位于不同的视图模型中。那么是否可以将这两个数据网格与两个不同视图模型中的集合绑定?
【问题讨论】:
我在一个视图中有两个数据网格,但作为这些数据网格的 ItemsSource 的集合位于不同的视图模型中。那么是否可以将这两个数据网格与两个不同视图模型中的集合绑定?
【问题讨论】:
您可以为每个 DataGrid 而不是容器视图设置 DataContext。
<Grid>
<DataGrid ... DataContext="..." />
<DataGrid ... DataContext="..." />
</Grid>
或者不使用 DataContext 直接绑定到模型
<DataGrid ItemsSource="{Binding Source={StaticResource ...}}" />
【讨论】:
寻求结合两者的视图模型:
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>
【讨论】:
不,不是直接的。不过,您确实有选择:
您可以将视图的 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; }
}
【讨论】: