【问题标题】:DataGrid DataGridComboBoxColumn lose its value after collapsingDataGrid DataGridComboBoxColumn 折叠后失去其价值
【发布时间】:2017-12-16 22:08:40
【问题描述】:

我有一个GridViewDataGridComboBoxColumn,第一次工作正常,但是当将列visibility 设置为collapsed,然后将visibility 再次返回到visible 时,列丢失它的价值。但是绑定到它的属性仍然具有正确的值。

当刷新 DataContext 时,所有值都会正确绑定。

我添加了一个测试Converter,注意到折叠列时,回调方法被触发,值为null。

<DataGridComboBoxColumn SelectedValueBinding="{Binding DbId}"
                        DisplayMemberPath="Name"
                        SelectedValuePath="Id"
                        Visibility="Visible">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding TestList}"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding TestList}"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

【问题讨论】:

  • 您需要在 TestList 上实现 INotifyPropertyChanged 以便 UI 反映更改。
  • 已经实现并且工作正常,更新数据上下文可以正确更新所有值。
  • 你能发布更多代码细节吗?我的意思是转换器
  • 转换器没有任何逻辑,它只是检查值。折叠列时调用convert back方法,值为null。
  • 返回您在转换方法中返回的相同可见性。

标签: c# wpf xaml datagrid datagridcomboboxcolumn


【解决方案1】:

我可以重现您的问题。您可以通过处理CellTemplateComboBoxLoaded 事件并重新设置SelectedValue 属性来解决此问题:

<DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="ComboBox">
        <Setter Property="ItemsSource" Value="{Binding TestList}"/>
        <EventSetter Event="Loaded" Handler="OnLoaded" />
    </Style>
</DataGridComboBoxColumn.ElementStyle>

private void OnLoaded(object sender, RoutedEventArgs e)
{
    ComboBox cmb = sender as ComboBox;
    dynamic dataObject = cmb.DataContext;
    cmb.SelectedValue = dataObject.DbId;
}

另一种解决方案是将DataGridComboBoxColumn 替换为DataGridTemplateColumn。然后,您希望将ComboBoxSelectedItem 属性绑定到数据对象的Db 属性,以便能够在CellTemplate 中显示Db 对象的Name 属性。

【讨论】:

  • 加载时我刚刚调用了 DataContext 并提出了 OnPropertyCanged ,它工作正常。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多