【问题标题】:Binding row selection to ViewModel's property将行选择绑定到 ViewModel 的属性
【发布时间】:2014-03-19 04:26:47
【问题描述】:

这应该很简单,但我坚持下去。如果我的DataGrid 绑定到一个集合(比如DataTable)并且项目(DataRows)的公共属性之一被命名为IsHighlighted,我可以将我的DataGrid 行IsSelected 状态绑定到这个属性,所以通过选择/取消选择相应的 DataGrid 行,更改表中的属性值将反映在 UI 中?

【问题讨论】:

  • 用Snoop检查,知道行的DataContext并与对应的源绑定..
  • @Sankarann: for(int i=0; i< 100; i++) Comments.Append("Thanks");
  • @Sankarann:Snoop 是一种工具。我想通了。看我的回答。

标签: wpf binding datagrid


【解决方案1】:

试试这个

         <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Setter Property="IsSelected" Value="{Binding IsHighlighted}"/>
            </Style>
        </DataGrid.RowStyle>

【讨论】:

  • 您的解决方案实际上是正确的。我在另一端错了。看我的回答。感谢您的努力。
【解决方案2】:

上面的 sn-p 似乎是正确的,稍作修改。 试试这个

        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Setter Property="IsSelected" Value="{Binding IsHighlighted, Mode="TwoWay"}"/>
            </Style>
        </DataGrid.RowStyle>

我假设你已经在你的模型类中实现了 INotifyPropertyChanged 接口。

【讨论】:

  • 您的解决方案实际上是正确的。我在另一端错了。看我的回答。感谢您的努力。
【解决方案3】:

通过 Snoop 解决了这个问题。 DataGridRowDataContext(当 DataGrid 绑定到 DataTable 时)是 DataRowView 而不是 DataRow。问题是IsHighlighted 是通过DataRow 的部分类添加的公共属性,因此没有进入DataRowView。我现在已经通过 DataSet 设计器向DataTable 添加了一个显式列,并且一切正常。希望它对以后的人有所帮助。

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2015-01-25
    • 2012-04-30
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多