Xceed 数据网格列可见性绑定
Xceed datagrid column visibility binding
我正在尝试将 Xceed 数据网格中列的可见性绑定到复选框的 IsChecked 值。
<xcdg:DataGridControl ReadOnly="{Binding ElementName=ShowReferenceColumn, Path=IsChecked}">
<xcdg:DataGridControl.Columns>
<xcdg:Column FieldName="Reference" Visible="{Binding ElementName=ShowReferenceColumn, Path=IsChecked}" />
</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>
数据网格的 ReadOnly 属性 正在通过更改复选框 IsChecked 值进行更新,但列的可见性没有改变。我是否在专栏的绑定中遗漏了什么?
编辑:
此处的 ReadOnly 属性 是 属性 的示例,我可以在其中使绑定生效。实际上,它不会绑定到用于列可见性的同一个复选框。
试试这个:
<xcdg:Column FieldName="Reference"
Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.ReadOnly}" />
编辑:
The ReadOnly
property here is an example of a property where I was able to get the binding to work. In reality it is not going to be binding to the same checkbox as used for the column visibility.
然后你需要将 CheckBox
的 IsChecked
属性 绑定到视图模型的源 属性 然后绑定 Visible
属性 列的相同来源 属性:
<xcdg:Column FieldName="Reference"
Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.DataContext.BooleanSourceProperty}" />
您不能在此上下文中使用 ElementName
,因为列和 CheckBox
不属于同一名称范围。
最近也遇到了类似的问题。
您可以只利用 Visible 属性,使用以下通用方法,这很容易理解:
<xcdg:ColumnFieldName="Reference" Title="Reference"
Visible="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type typeOfAncestor}}, Path=DataGridControl.DataContext.BooleanSourceProperty}"/>
例如,如果 typeOfAncestor 是 xcdg:MergedColumn 并且 BooleanSourceProperty 是 IsChecked,那么代码应该是:
<xcdg:ColumnFieldName="Reference" Title="Reference"
Visible="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type xcdg:MergedColumn}}, Path=DataGridControl.DataContext.IsChecked}"/>
这样就可以解决问题了,有时候出现异常"Collection was modified; enumeration operation may not execute.",异常也可以轻松避免
参考:
https://xceed.com/forums/topic/Column-visible-binding-issue-MVVM/
我正在尝试将 Xceed 数据网格中列的可见性绑定到复选框的 IsChecked 值。
<xcdg:DataGridControl ReadOnly="{Binding ElementName=ShowReferenceColumn, Path=IsChecked}">
<xcdg:DataGridControl.Columns>
<xcdg:Column FieldName="Reference" Visible="{Binding ElementName=ShowReferenceColumn, Path=IsChecked}" />
</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>
数据网格的 ReadOnly 属性 正在通过更改复选框 IsChecked 值进行更新,但列的可见性没有改变。我是否在专栏的绑定中遗漏了什么?
编辑:
此处的 ReadOnly 属性 是 属性 的示例,我可以在其中使绑定生效。实际上,它不会绑定到用于列可见性的同一个复选框。
试试这个:
<xcdg:Column FieldName="Reference"
Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.ReadOnly}" />
编辑:
The
ReadOnly
property here is an example of a property where I was able to get the binding to work. In reality it is not going to be binding to the same checkbox as used for the column visibility.
然后你需要将 CheckBox
的 IsChecked
属性 绑定到视图模型的源 属性 然后绑定 Visible
属性 列的相同来源 属性:
<xcdg:Column FieldName="Reference"
Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.DataContext.BooleanSourceProperty}" />
您不能在此上下文中使用 ElementName
,因为列和 CheckBox
不属于同一名称范围。
最近也遇到了类似的问题。
您可以只利用 Visible 属性,使用以下通用方法,这很容易理解:
<xcdg:ColumnFieldName="Reference" Title="Reference"
Visible="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type typeOfAncestor}}, Path=DataGridControl.DataContext.BooleanSourceProperty}"/>
例如,如果 typeOfAncestor 是 xcdg:MergedColumn 并且 BooleanSourceProperty 是 IsChecked,那么代码应该是:
<xcdg:ColumnFieldName="Reference" Title="Reference"
Visible="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type xcdg:MergedColumn}}, Path=DataGridControl.DataContext.IsChecked}"/>
这样就可以解决问题了,有时候出现异常"Collection was modified; enumeration operation may not execute.",异常也可以轻松避免
参考: https://xceed.com/forums/topic/Column-visible-binding-issue-MVVM/