1

我正在尝试将 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 属性是我能够使绑定工作的属性示例。实际上,它不会绑定到与用于列可见性相同的复选框。

4

2 回答 2

3

试试这个:

<xcdg:Column FieldName="Reference" 
             Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.ReadOnly}" />

编辑:

这里的ReadOnly属性是我能够使绑定工作的属性示例。实际上,它不会绑定到与用于列可见性相同的复选框。

然后您需要将 的IsChecked属性绑定CheckBox到视图模型的源属性,然后将Visible列的属性绑定到相同的源属性:

<xcdg:Column FieldName="Reference" 
             Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.DataContext.BooleanSourceProperty}" />

您不能ElementName在此上下文中将其用作列,并且CheckBox不属于同一名称范围。

于 2018-02-05T14:59:57.413 回答
0

最近也遇到了类似的问题。

您可以只使用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/

于 2018-07-24T00:13:37.910 回答