我在一个视图中有两个数据网格,但作为这些数据网格的 ItemsSource 的集合位于不同的视图模型中。那么是否可以将这两个数据网格与两个不同视图模型中的集合绑定?
问问题
5212 次
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 回答