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.

然后你需要将 CheckBoxIsChecked 属性 绑定到视图模型的源 属性 然后绑定 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}"/>

例如,如果 typeOfAncestorxcdg:MergedColumn 并且 BooleanSourcePropertyIsChecked,那么代码应该是:

<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/