Xceed datagrid列可见性绑定

时间:2018-02-05 14:50:02

标签: c# wpf datagrid xceed-datagrid

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

2 个答案:

答案 0 :(得分:3)

试试这个:

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

修改

  

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

然后,您需要将IsChecked的{​​{1}}属性绑定到视图模型的source属性,然后将列的CheckBox属性绑定到相同的源属性:< / p>

Visible

您不能在此上下文中使用<xcdg:Column FieldName="Reference" Visible="{Binding RelativeSource={RelativeSource Self}, Path=DataGridControl.DataContext.BooleanSourceProperty}" /> 作为列,而ElementName不属于同一名称范围。

答案 1 :(得分:0)

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

您可以仅使用 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;可能无法执行枚举操作。”,也可以轻松避免该异常。

参考: https://xceed.com/forums/topic/Column-visible-binding-issue-MVVM/