c# - DataGrid ComboBox 第一次点击时没有选中项

标签 c# wpf mvvm data-binding datagrid

最近我问了类似的问题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 会防止出现异常。

最佳答案

  • 如果您的公司不是您在评论中提到的字符串,那么它无法显示名称,除非您设置 DisplayMemberPath="Name" 或创建 ItemTemplate。

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

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

.

关于c# - DataGrid ComboBox 第一次点击时没有选中项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29523632/

相关文章:

c# - 创建 Window 时出现 BindingExpression 路径错误(尚未绑定(bind) VM)

c# - 折叠所有扩展器并默认展开其中一个

c# - EF5 不创建枚举列

c# - GenerateEmailConfirmationTokenAsync 默认过期时间跨度

c# - 包含访问 token 时如何从客户端应用程序中的 IdentityServer 获取用户 ID?

c# - 转换器中的 WPF MultiBinding 失败 ==> DependencyProperty.UnsetValue

c# - 是否可以加快这种递归目录方法的速度?

c# - 绑定(bind)何时真正发生

wpf - 有没有办法在 xaml 编辑器中预览动画?

c# - 从 ViewModel 关闭窗口