根据另一个控件的状态以 XAML 样式填充 WPF 组合框项



我想我很接近,但我在这里错过了一些东西。
我真的在尝试扩展我的 XAML 知识,并在我的 WPF 项目中整理我的代码。
我有一种情况,我想根据另一个控件的状态填充组合框的项。

有一个样式,我正在检查复选框的值:

    <Style 
        x:Key="{x:Type ComboBox}" 
        TargetType="{x:Type ComboBox}">
        <Style.Triggers>
            <DataTrigger
                Binding="{Binding ElementName=SomeCheckBox, Path=IsChecked}"
                Value="True">

这似乎允许我触发盒子的值。
我现在正试图弄清楚如何设置我的二传手。
似乎无法访问项目属性...
这是我一直在搞砸的:

                <Setter
                    Property="Items">
                    <Setter.Value>
                        <ComboBoxItem Content="SomeValue" />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>

但很明显,这是行不通的。
有没有办法使用二传手来做到这一点?
我是否需要提供某种列表或列表,并将其存储在窗口资源中并用作项目源?
我将如何列出该列表?

基于另一个控件的状态

在将复选框IsChecked绑定到属性后,我会在 VM 上的代码中执行此操作,同时还将 ComboBox 绑定到根据 IsChecked 的值而变化的列表。

下面是一个快速示例:

 public bool IsOperationChecked // Bound to the checkbox
 {                       
     get { return _IsOperationChecked; }
     set { 
            _IsOperationChecked= value; 
            OnPropertyChanged("IsOperationChecked"); 
            Names = (value) ? new List<string>() {"alpha", "beta"} : 
                              new List<string>() {"Bill", "Frank"};
         }
  }
 public List<string> Names // Bound to the Combobox
 {
    get { return _Names; }
    set { _Names = value; OnPropertyChanged("Names"); }
 }

使用资源中声明的数组:

<Window.Resources>
    <x:Array Type="sys:String" 
             xmlns:sys="clr-namespace:System;assembly=mscorlib" 
             x:Key="MyArray">
        <sys:String>One</sys:String>
        <sys:String>Two</sys:String>
    </x:Array>
</Window.Resources>
...
<Style x:Key="{x:Type ComboBox}" 
       TargetType="{x:Type ComboBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=SomeCheckBox, Path=IsChecked}" Value="True">
            <Setter Property="ItemsSource" Value="{StaticResource MyArray}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

最新更新