SilverLight - MVVM绑定viewmodel属性到datagrid列

时间:2009-12-01 11:00:20

标签: silverlight datagrid mvvm viewmodel

在我的SilverLight应用程序中,我的ViewModel中有一个名为'vmProperty'的属性和一个名为'dgSource'的列表。

我将dgSource作为ItemsSource绑定到datagrid,此时每个datagrid行的datacontext都会更改为dgSource中的每个项目。其中一列(例如复选框列)需要绑定到vmProperty。但由于ViewModel不再是行的datacontext,我无法访问此属性。

如何解决这个问题?如果问题不明确,请告诉我,我会发布样品。提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试将chechbox列的checked属性设置为:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClassName}}, Path=DataContext.vmProperty}

这意味着将找到哪个类型是您的视图类型的父元素,而且它的DataContext的vmProperty将被检索为值。

更新:

这是WPF的解决方案。

对于silverlight,我认为你可以尝试使用这样的结构:

{Binding Path=DataContext.vmProperty, ElementName=YourElement}

YourElement的DataContext是视图模型的实例。我认为它可以是一个例如网格。

<Grid x:Name="YourElement" DataContext={Binding}>
<!-- DataGrid here -->
</Grid>

答案 1 :(得分:0)

<击> 假设您的ViewModel被指定为LayoutRoot的DataContext,这应该有效: -

IsChecked="{Binding DataContext.vmProperty, ElementName=LayoutRoot}"

<击>

当然这不起作用,最终会复制模板,因此实际使用绑定的名称范围中不存在“LayoutRoot”。

最简单的解决方案,因为这是一个ViewModel,就是改变模型。在dgSource中可用的对象上公开所需的值,或者公开导航回ViewModel的Parent属性。