最近我问了类似的问题here和 here ,但无法正确解决问题。
我有一个带有 ComboBox 的 DataGrid,它可以包含或不包含选定的项目。但如果是这样,那么当下拉列表打开时,组合框应该选择它,但事实并非如此。
目前我有这段代码,除了第一次打开下拉菜单时之外,它都可以工作。没有选择任何内容。
<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"
.
关于c# - DataGrid ComboBox 第一次点击时没有选中项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29523632/