c# - 如何通过使用 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>
解决方案
为了启用/禁用组合框项目,我在 xaml 中为它们使用了转换器,其中传递了来自所有组合框(ViewModel 中的集合)的所有选定值。在我的转换器类中,我进行了所需的检查并返回一个布尔值(是否是 ViewModel 中的集合中的项目)。也许这对某人有帮助。
推荐阅读
- python - 回滚多用途 python 脚本的最佳实践
- javascript - 聆听 EarPod 的播放/暂停按钮点击
- java - 井字游戏服务器/客户端问题告诉其他客户端他们在游戏结束后输了
- javascript - 如何将我的代码重构为游戏循环?
- android - 从 CountDownTimer 返回布尔值
- gmail-api - 使用 Thunderbird 等过滤器移动电子邮件
- asp.net - 找不到包的编译库位置...在 IIS 上运行 asp.net core 2 发布项目后
- java - 同时“就地”对多个数组进行排序
- javascript - 使用文本 jquery 将值输入从一个传递到另一个
- javascript - 仅在使用 nuxt.js 首次加载时设置数据