禁止选择 Datagrid ComboBox 中的特定项目
Disable selection of specific item in DatagridComboBox
背景:
我有一个带有一些测量值的数据网格,我们可以批准和阻止这些测量值。
现在我们为此有了一个新类型,例如 "Cancelled"。但是只有服务器需要这种类型并将其显示给客户。
但是客户不应该 select 这个 "Cancelled" 但他应该 select.
的其他 2 种类型
列表从数据库中获取所有不同的元素(3 个条目)。
首先,我尝试从 ApprovementCollection 中删除已取消的项目,但随后它显示了一个空字段而不是 "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();
}
}
感谢您的帮助
可以为您的单元格编写 DataGridTemplateColumn
而不是使用 DataGridComboBoxColumn
。只需将 属性 Enabled
添加到您的 ComponentMeasurementApprovement
class。此 属性 表示是否允许用户 select 批准。
现在创建一个包含 ComboBox
作为模板的新 DataGridTemplateColumn
。可以通过 ItemContainerStyle
.
将每个 ComboBox
项目的 IsEnabled
绑定到属性
这是代码:
<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>
这是结果:
由于第二个项目被禁用,因此无法 select 它但是已经 selected 的项目保持 selected。
背景: 我有一个带有一些测量值的数据网格,我们可以批准和阻止这些测量值。 现在我们为此有了一个新类型,例如 "Cancelled"。但是只有服务器需要这种类型并将其显示给客户。 但是客户不应该 select 这个 "Cancelled" 但他应该 select.
的其他 2 种类型列表从数据库中获取所有不同的元素(3 个条目)。 首先,我尝试从 ApprovementCollection 中删除已取消的项目,但随后它显示了一个空字段而不是 "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();
}
}
感谢您的帮助
可以为您的单元格编写 DataGridTemplateColumn
而不是使用 DataGridComboBoxColumn
。只需将 属性 Enabled
添加到您的 ComponentMeasurementApprovement
class。此 属性 表示是否允许用户 select 批准。
现在创建一个包含 ComboBox
作为模板的新 DataGridTemplateColumn
。可以通过 ItemContainerStyle
.
ComboBox
项目的 IsEnabled
绑定到属性
这是代码:
<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>
这是结果:
由于第二个项目被禁用,因此无法 select 它但是已经 selected 的项目保持 selected。