【问题标题】:DataGrid ComboBox has no selected item when clicked the first timeDataGrid ComboBox第一次点击时没有选中项
【发布时间】:2015-04-08 19:26:55
【问题描述】:

最近我问了类似的问题herehere,但无法正确解决问题。

我有一个带有 ComboBox 的 DataGrid,它可以包含或不包含所选项目。但如果是这样,那么 ComboBox 应该在下拉菜单打开时选择它,而不是。

目前我有这个代码,除了第一次打开下拉菜单时,它可以工作。它没有被选中。

 <DataGridTemplateColumn Header="Company">
     <DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
             <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Companies}" 
                       SelectedItem="{Binding Company, Converter={StaticResource NullValueConverter}}"/>
         </DataTemplate>
     </DataGridTemplateColumn.CellEditingTemplate>
     <DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
         <TextBlock Text="{Binding Company, Converter={StaticResource NullValueConverter}}" />
      </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

如果公司是nullNullValueConverter 可防止异常。

【问题讨论】:

标签: c# wpf mvvm data-binding datagrid


【解决方案1】:
  • 如果您的公司不是您在 cmets 中提到的字符串,则它无法显示名称,除非您设置 DisplayMemberPath="Name" 或创建一个 ItemTemplate。

  • 您应该使用SelectedItem="{Binding Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" 来更新 价值一旦改变,因为如果你不这样做,它只会 当您关注另一个单元格或行时引发 ProperyChanged。

  • 如果您的属性是不可变的或值类型,那么您 应该使用SelectedValue="{Binding Path=Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" SelectedValuePath="Content"

.

【讨论】:

  • 谢谢。尝试了您的建议,但没有任何改变。顺便说一句,它确实显示没有DisplayMemberPath="Name" 的名称,因为我在Company 中实现了ToString()
  • @juergend 那么您显示的内容没有任何问题,并且您不需要空转换器,您的意思是,如果您打开 BMW 第二行,您看不到任何选择?!
  • 顺便说一句,我必须确保 SelectedItemItemsSource 对象之一。
  • @juergend 它必须是,但即使您将 SelectedItem 设置为不在您的 ItemsSource 中的某个实例,您也不会得到任何例外,只是不会选择任何项目
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多