第一次单击时,DataGrid ComboBox没有选定的项目

时间:2015-04-08 19:26:55

标签: c# wpf mvvm data-binding datagrid

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

我有一个带有ComboBox的DataGrid,它可以包含所选项目。但如果确实如此,那么当下拉列表打开时,ComboBox应该选择它。

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>

如果公司为NullValueConverter,则null会阻止例外情况。

1 个答案:

答案 0 :(得分:2)

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

  • 您应该使用SelectedItem="{Binding Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"进行更新 价值一改变,因为如果你不改变它 当您聚焦另一个单元格或行时,请提升ProperyChanged。

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