SfDataGrid C# WPF -IsHidden上的绑定不更新

aemubtdh  于 2023-02-10  发布在  C#
关注(0)|答案(1)|浏览(185)

我有SyncFusion的C#WPF版本www.example.com,当我运行我的程序时,我的绑定工作(如果我将布尔值设置为true,则列隐藏,如果我将其设置为false,则列可见)。19.4.0.56 in C# WPF and my Binding works when I run my program (if I set the boolean to true, the column is hidden, if I set it to false, it is visible).
我的问题是,当我更新它。我的SfDataGrid不适应。
下面是我的代码:

    • 属性布尔值**
public bool UserExpertValues
{
    get => _userExpertValues;

    set
    {
        if (value != _userExpertValues)
        {
            SetProperty(ref _userExpertValues, value);
            _userExpertValues = value;
            RaisePropertyChanged(nameof(UserExpertValues));
        }
    }
}
    • 列(网格文本列)**
<chart:GridTextColumn MappingName="{Binding ColumnsText[2], Converter={StaticResource TranslationConverter}}" IsHidden="{Binding UserExpertValues, Mode=TwoWay}">

我可以确保我的布尔属性的值被改变了。它在ShowHideColumns()方法中被改变了。

s8vozzvw

s8vozzvw1#

默认情况下,MappingName是一个字符串属性,它不是可绑定属性(依赖关系属性)。在您的方案中,您尝试将其用作依赖关系属性(bindable属性),这就是为什么列不能正确填充的原因。可以将基础属性名称定义为MappingName,如果要更改标题文本,则可以使用converter for定义绑定GridColumn的HeaderText属性下面提到了代码片段,

<syncfusion:GridTextColumn MappingName="Country"
                       HeaderText="{Binding Path=ColumnsText, Converter={StaticResource translationConverter}}" 
                       IsHidden="{Binding UserExpertValues, Mode=TwoWay, Source={StaticResource viewModel}}" />

DataGrid的列定义不是SfDataGrid可视化树的一部分,因此无法将SfDataGrid DataContext与GridColumn绑定。但是,可以通过在资源内定义ViewModel(DataContext)来克服此问题,并且可以使用StaticResource绑定将ViewModel绑定到GridColumn,如下面的代码示例所示。

<Window.Resources>
 <local:TranslationConverter x:Key="translationConverter"/>
 <local:ViewModel x:Key="viewModel" />
 </Window.Resources>
 <Grid DataContext="{StaticResource viewModel}" >
      <Grid.ColumnDefinitions>
          <ColumnDefinition/>
     <ColumnDefinition Width="200"/>
 </Grid.ColumnDefinitions>
 <syncfusion:SfDataGrid x:Name="sfDataGrid"   
                        AllowEditing="True"
                        ItemsSource="{Binding Orders}"
                        AutoGenerateColumns="False">
     <syncfusion:SfDataGrid.Columns>
         <syncfusion:GridTextColumn MappingName="OrderID" HeaderText="Order ID" />
         <syncfusion:GridTextColumn MappingName="CustomerID" HeaderText="Customer ID" />
         <syncfusion:GridTextColumn MappingName="CustomerName" HeaderText="Customer Name" />
         <syncfusion:GridTextColumn MappingName="Country"
                                    HeaderText="{Binding Path=ColumnsText, Converter={StaticResource translationConverter}}" 
                                    IsHidden="{Binding UserExpertValues, Mode=TwoWay, Source={StaticResource viewModel}}" />
         <syncfusion:GridTextColumn MappingName="UnitPrice" HeaderText="Unit Price" />
     </syncfusion:SfDataGrid.Columns>
 </syncfusion:SfDataGrid>

Sample demo Link

相关问题