首页 > 解决方案 > 如何通过使用 MVVM 模式单击一个来启用/禁用 wpf 中不同组合框的组合框项目?

问题描述

我使用 MVVM 模式创建了一个项目。在我的视图中,我创建了组合框。在 ViewModel 中,我为 ItemsSource 为带有字符串值的组合框创建 ObservableCollection:

public ObservableCollection<string> ComboBoxItems
    {
        get; set;
    }

在 ViewModel 构造函数中,我创建了模型列表(foreach 组合框)。我的模型类只有两个属性:SelectedComboBoxItem 和 IsEnabledComboBoxItem。

我想要一个逻辑,比如如果我在一个组合框中选择一个项目,它应该在这个组合框和所有其他组合框中禁用。我怎么能用绑定做到这一点?现在我的 xaml 代码看起来像这样,但它只禁用了选定的组合框项目,并且只在一个组合框中禁用了他被调用的地方:

<ComboBox  ItemsSource="{Binding ComboBoxItems}"
           SelectedItem="{Binding SelectedComboBoxItem }" IsEditable="True">
      <ComboBox.ItemContainerStyle>
             <Style TargetType="ComboBoxItem">
                  <Setter Property="IsEnabled" Value="{Binding IsEnabledComboBoxItem}" />
             </Style>
      </ComboBox.ItemContainerStyle>
</ComboBox>

标签: c#wpfmvvmdata-bindingcombobox

解决方案


为了启用/禁用组合框项目,我在 xaml 中为它们使用了转换器,其中传递了来自所有组合框(ViewModel 中的集合)的所有选定值。在我的转换器类中,我进行了所需的检查并返回一个布尔值(是否是 ViewModel 中的集合中的项目)。也许这对某人有帮助。


推荐阅读