0

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

列表从数据库中获取所有不同的元素(3 个条目)。首先,我尝试从 ApprovementCollection 中删除已取消的项目,但随后它显示了一个空字段而不是“已取消”。

问题: 是否可以从 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();
        }
    }

感谢您的帮助

4

1 回答 1

0

这可以DataGridTemplateColumn为您的单元格编写 a 而不是使用DataGridComboBoxColumn. 只需Enabled向您的ComponentMeasurementApprovement班级添加一个属性。此属性指示是否允许用户选择批准。

现在创建一个新DataGridTemplateColumn的包含一个ComboBox作为模板。可以通过设置样式将IsEnabled每个项目绑定到一个属性。ComboBoxItemContainerStyle

这是代码

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

这是结果

在此处输入图像描述

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

于 2017-08-10T14:55:22.107 回答