首页 文章

Xceed datagrid列可见性绑定

提问于
浏览
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值的更新来更新,但列的可见性不会更改 . 我在列上的绑定中遗漏了什么吗?

Edit:

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

2 回答

  • 0

    试试这个:

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

    Edit:

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

    然后,您需要将 CheckBoxIsChecked 属性绑定到视图模型的source属性,然后将列的 Visible 属性绑定到同一源属性:

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

    您不能在此上下文中使用 ElementName 作为列,并且 CheckBox 不属于同一个名称范围 .

  • 3

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

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

    然后问题就可以解决,有时如果有一个例外“集合被修改;枚举操作可能无法执行 . ”,也可以轻松避免异常 .

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

相关问题