代码之家  ›  专栏  ›  技术社区  ›  etrast81

Silverlight-MVVM将ViewModel属性绑定到DataGrid列

  •  2
  • etrast81  · 技术社区  · 16 年前

    在我的Silverlight应用程序中,我的ViewModel中有一个名为“vmproperty”的属性和一个名为“dgsource”的列表。

    我将dgsource作为itemssource绑定到datagrid,此时每个datagrid行的dataContext都将更改为dgsource中的每个项。其中一列(如复选框列)需要绑定到vmproperty。但由于ViewModel不再是行的DataContext,因此我无法访问此属性。

    我该如何解决这个问题?如果问题不清楚,请告诉我,我会寄一份样品。事先谢谢。

    2 回复  |  直到 16 年前
        1
  •  0
  •   AnthonyWJones    16 年前

    假设您的ViewModel被指定为LayoutRoot的DataContext,那么应该可以:

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

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

    因为这是一个视图模型,所以最简单的解决方案是更改模型。在dgsource中可用的对象上公开所需的值或公开 Parent 返回到ViewModel的属性。

        2
  •  0
  •   bniwredyc    16 年前

    尝试将CHECHBOX列的CHECKBOX属性设置为:

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

    这意味着将找到类型为视图类型的父元素,并将其DataContext的vmProperty作为值进行检索。

    更新:

    这是WPF的解决方案。

    对于Silverlight,我认为您可以尝试使用如下结构:

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

    其中,关联的DataContext是视图模型的实例。我认为它可以是一个网格。

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