在我的SilverLight应用程序中,我的ViewModel中有一个名为'vmProperty'的属性和一个名为'dgSource'的列表。
我将dgSource作为ItemsSource绑定到datagrid,此时每个datagrid行的datacontext都会更改为dgSource中的每个项目。其中一列(例如复选框列)需要绑定到vmProperty。但由于ViewModel不再是行的datacontext,我无法访问此属性。
如何解决这个问题?如果问题不明确,请告诉我,我会发布样品。提前谢谢。
答案 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
属性。