DataGrid ComboBox第一次点击没有选中项
DataGrid ComboBox has no selected item when clicked the first time
最近我也问过类似的问题here and here,但未能正确解决问题。
我有一个带有 ComboBox 的 DataGrid,它可以包含或不包含 selected 项。但是,如果确实如此,那么当下拉菜单打开时,ComboBox 应该 select 它不是。
目前我有这段代码,但第一次打开下拉菜单时除外。没什么 selected.
<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>
如果公司是 null
,NullValueConverter
可以防止异常。
如果您的公司不是您在评论中提到的字符串,那么它无法显示名称,除非您设置
DisplayMemberPath="Name"
或创建一个 ItemTemplate。
你应该使用SelectedItem="{Binding
Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
来更新
价值一旦改变,因为如果你不这样做,它只会
当您关注另一个单元格或行时引发 ProperyChanged。
如果您的 属性 是不可变的或值类型,那么您
应该使用 SelectedValue="{Binding Path=Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" SelectedValuePath="Content"
.
最近我也问过类似的问题here and here,但未能正确解决问题。
我有一个带有 ComboBox 的 DataGrid,它可以包含或不包含 selected 项。但是,如果确实如此,那么当下拉菜单打开时,ComboBox 应该 select 它不是。
目前我有这段代码,但第一次打开下拉菜单时除外。没什么 selected.
<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>
如果公司是 null
,NullValueConverter
可以防止异常。
如果您的公司不是您在评论中提到的字符串,那么它无法显示名称,除非您设置
DisplayMemberPath="Name"
或创建一个 ItemTemplate。你应该使用
SelectedItem="{Binding Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
来更新 价值一旦改变,因为如果你不这样做,它只会 当您关注另一个单元格或行时引发 ProperyChanged。如果您的 属性 是不可变的或值类型,那么您 应该使用
SelectedValue="{Binding Path=Company,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" SelectedValuePath="Content"
.