【问题标题】:Disable selection of specific item in DatagridComboBox禁用 Datagrid ComboBox 中特定项目的选择
【发布时间】:2017-08-10 14:29:19
【问题描述】:

背景: 我有一个带有一些测量值的数据网格,我们可以批准和阻止这些测量值。 现在我们有一个新的类型,比如“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();
        }
    }

感谢您的帮助

【问题讨论】:

  • 只是不要把它放在PossibleComponentMeasurementApprovements 集合中。

标签: c# wpf selection datagridcomboboxcolumn itemsource


【解决方案1】:

这可以为您的单元格编写DataGridTemplateColumn 而不是使用DataGridComboBoxColumn。只需将属性 Enabled 添加到您的 ComponentMeasurementApprovement 类。此属性指示是否允许用户选择批准。

现在创建一个新的DataGridTemplateColumn,其中包含ComboBox 作为模板。可以通过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>

这是结果

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2010-11-07
    • 2017-06-21
    相关资源
    最近更新 更多