我想我很接近,但我在这里错过了一些东西。
我真的在尝试扩展我的 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>