根据另一个控件

时间:2015-04-28 21:53:53

标签: c# wpf xaml combobox

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

我有一种风格,我可以检查复选框的值:

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

这似乎允许我触发盒子的价值。
我现在想弄清楚如何设置我的二传手 似乎没有办法访问items属性...
这就是我一直在搞乱的地方:

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

但很明显,它不会起作用 有没有办法使用setter来做到这一点?
我是否需要提出某些列表或列表,我将其存放在窗口资源中并用作项目源? 我将如何制作该清单?

2 个答案:

答案 0 :(得分:2)

  

基于另一个控件的状态

在将复选框IsChecked绑定到属性之后,我会在VM后面的代码中执行此操作,同时还将ComboBox绑定到基于 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"); } } 的值更改的列表。

这是一个简单的例子:

xml_gettext

答案 1 :(得分:1)

使用资源中声明的数组:

<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>