Отключить выбор определенного элемента в DatagridComboBox

Предыстория: у меня есть Datagrid с некоторыми измерениями, и эти измерения мы можем одобрить и заблокировать. Теперь у нас есть для этого новый тип, например «Отменено». Но этот Тип нужен только Серверу и для его отображения Клиенту. Но у Клиента не должно быть возможности выбрать этот «Отмененный», но он должен выбрать два других типа.

Список получает все различные элементы из базы данных (3 записи). Сначала я попытался удалить Отмененный элемент из ApprovementCollection, но затем он отобразил пустое поле вместо «Отменено».

Вопрос. Можно ли отключить только один из этих трех элементов в ограниченном списке свойства Itemsource из DataGridComboBoxColumn?

Отключено или не отображается в меню выбора - это то, что я должен сделать. (Только "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();
        }
    }

Спасибо за вашу помощь


person Osti    schedule 10.08.2017    source источник
comment
Только не помещайте его в PossibleComponentMeasurementApprovements коллекцию.   -  person icebat    schedule 10.08.2017


Ответы (1)


Это возможно при написании 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>

Вот результат:

введите здесь описание изображения

Поскольку второй элемент отключен, его невозможно выбрать, но уже выбранный элемент остается выбранным.

person Fruchtzwerg    schedule 10.08.2017