禁用DatagridComboBox

时间:2017-08-10 14:29:20

标签: c# wpf selection datagridcomboboxcolumn itemsource

背景 我有一个带有一些测量的数据网格,我们可以批准和阻止这个测量。 现在我们有一个新类型,如“已取消”。但是,只有服务器需要此类型并将其显示给客户。 但是客户不应该选择这个“已取消”,而应该选择其他2种类型。

List从数据库中获取所有不同的元素(3个条目)。 首先,我尝试从ApprovementCollection中删除Canceled Item,但后来显示一个空字段而不是“Cancelled”。

问题: 是否可以从DataGridComboBoxColumn中禁用Itemsource属性的有界列表中的这3个项目中的一个?

选择菜单中禁用或不显示是我必须做的。 (只有“Freigabe”和“GESPERRT”)

View List in action

查看:

<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();
        }
    }

感谢您的帮助

1 个答案:

答案 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>

以下是结果

enter image description here

由于第二项被禁用,因此无法选择它,但已选择的项目会保持选中状态。