禁止选择 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。