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