2

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

我将我的 dgSource 作为 ItemsSource 绑定到数据网格,此时每个数据网格行的数据上下文更改为 dgSource 中的每个项目。其中一列,比如复选框列,需要绑定到 vmProperty。但由于 ViewModel 不再是该行的数据上下文,我无法访问此属性。

我该如何解决这个问题?如果问题不清楚,请告诉我,我将发布示例。提前致谢。

4

2 回答 2

0

尝试将您的 chechbox 列的选中属性设置为:

{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>
于 2009-12-01T11:19:16.183 回答
0

假设您的 ViewModel 被分配为 LayoutRoot 的 DataContext 这应该可以工作:-

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

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

由于这是 ViewModel,最简单的解决方案是更改模型。公开 dgSource 中可用对象的所需值或公开Parent导航回 ViewModel 的属性。

于 2009-12-01T12:27:54.547 回答