背景 我有一个带有一些测量的数据网格,我们可以批准和阻止这个测量。 现在我们有一个新类型,如“已取消”。但是,只有服务器需要此类型并将其显示给客户。 但是客户不应该选择这个“已取消”,而应该选择其他2种类型。
List从数据库中获取所有不同的元素(3个条目)。 首先,我尝试从ApprovementCollection中删除Canceled Item,但后来显示一个空字段而不是“Cancelled”。
问题: 是否可以从DataGridComboBoxColumn中禁用Itemsource属性的有界列表中的这3个项目中的一个?
选择菜单中禁用或不显示是我必须做的。 (只有“Freigabe”和“GESPERRT”)
查看:
<DataGridComboBoxColumn ClipboardContentBinding="{x:Null}"
DisplayMemberPath="ApprovementText"
Header="{x:Static trans:Translations.ClearenceHeader}"
ItemsSource="{Binding Source={StaticResource PossibleComponentMeasurementApprovements}}"
SelectedItemBinding="{Binding Approvement,
UpdateSourceTrigger=PropertyChanged}" />
视图模型:
private IEnumerable<ComponentMeasurementApprovement> possibleComponentMeasurementApprovements;
public IEnumerable<ComponentMeasurementApprovement> PossibleComponentMeasurementApprovements {
get { return possibleComponentMeasurementApprovements; }
set {
possibleComponentMeasurementApprovements = value;
OnPropertyChanged();
}
}
感谢您的帮助
答案 0 :(得分:0)
可以为您的单元格写DataGridTemplateColumn
,而不是使用DataGridComboBoxColumn
。只需将属性Enabled
添加到ComponentMeasurementApprovement
课程即可。此属性指示是否允许用户选择批准。
现在创建一个包含DataGridTemplateColumn
作为模板的新ComboBox
。通过IsEnabled
设置样式,可以将每个ComboBox
项的ItemContainerStyle
绑定到一个原型。
以下是代码:
<DataGridTemplateColumn Header="CustomCell">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={x:Static local:ViewModel.PossibleComponentMeasurementApprovements}}"
DisplayMemberPath="ApprovementText"
SelectedItem="{Binding Approvement}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsEnabled" Value="{Binding Enabled}"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
以下是结果:
由于第二项被禁用,因此无法选择它,但已选择的项目会保持选中状态。