C# 基于另一个控件的状态以XAML样式填充WPF组合框项
我想我很接近了,但我错过了一些东西。C# 基于另一个控件的状态以XAML样式填充WPF组合框项,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我想我很接近了,但我错过了一些东西。 我真的在努力扩展我的XAML知识,在我的WPF项目中整理我的代码。 我想根据另一个控件的状态填充组合框的项 我有一种检查复选框值的样式: <Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}"> <Style.Triggers> <DataTrigger
我真的在努力扩展我的XAML知识,在我的WPF项目中整理我的代码。
我想根据另一个控件的状态填充组合框的项 我有一种检查复选框值的样式:
<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实现这一点?
我是否需要拿出一个或多个列表,存放在窗口资源中并用作项目源?
那我该怎么做呢 基于另一个控件的状态 在将复选框
IsChecked
绑定到属性,同时将组合框绑定到根据IsChecked
的值更改的列表之后,我会在VM上的代码隐藏中执行此操作
下面是一个简单的例子:
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"); }
}
public bool IsOperationChecked//绑定到复选框
{
获取{return\u IsOperationChecked;}
集合{
_等操作检查=值;
已更改的不动产(“已检查的等操作”);
名称=(值)?新列表(){“alpha”,“beta”}:
新名单({“比尔”、“弗兰克”});
}
}
公共列表名称//绑定到组合框
{
获取{return\u Names;}
设置{u name=value;OnPropertyChanged(“name”);}
}
基于另一个控件的状态
在将复选框IsChecked
绑定到属性,同时将组合框绑定到根据IsChecked
的值更改的列表之后,我会在VM上的代码隐藏中执行此操作
下面是一个简单的例子:
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"); }
}
public bool IsOperationChecked//绑定到复选框
{
获取{return\u IsOperationChecked;}
集合{
_等操作检查=值;
已更改的不动产(“已检查的等操作”);
名称=(值)?新列表(){“alpha”,“beta”}:
新名单({“比尔”、“弗兰克”});
}
}
公共列表名称//绑定到组合框
{
获取{return\u Names;}
设置{u name=value;OnPropertyChanged(“name”);}
}
基于另一个控件的状态
在将复选框IsChecked
绑定到属性,同时将组合框绑定到根据IsChecked
的值更改的列表之后,我会在VM上的代码隐藏中执行此操作
下面是一个简单的例子:
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"); }
}
public bool IsOperationChecked//绑定到复选框
{
获取{return\u IsOperationChecked;}
集合{
_等操作检查=值;
已更改的不动产(“已检查的等操作”);
名称=(值)?新列表(){“alpha”,“beta”}:
新名单({“比尔”、“弗兰克”});
}
}
公共列表名称//绑定到组合框
{
获取{return\u Names;}
设置{u name=value;OnPropertyChanged(“name”);}
}
基于另一个控件的状态
在将复选框IsChecked
绑定到属性,同时将组合框绑定到根据IsChecked
的值更改的列表之后,我会在VM上的代码隐藏中执行此操作
下面是一个简单的例子:
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"); }
}
public bool IsOperationChecked//绑定到复选框
{
获取{return\u IsOperationChecked;}
集合{
_等操作检查=值;
已更改的不动产(“已检查的等操作”);
名称=(值)?新列表(){“alpha”,“beta”}:
新名单({“比尔”、“弗兰克”});
}
}
公共列表名称//绑定到组合框
{
获取{return\u Names;}
设置{u name=value;OnPropertyChanged(“name”);}
}
使用资源中声明的数组:
<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>
一个
两个
...
使用资源中声明的数组:
<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>
一个
两个
...
使用资源中声明的数组:
<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>
一个
两个
...
使用资源中声明的数组:
<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>
一个
两个
...
尝试ItemsSource而不是Items。我可以使用ItemsSource,但我仍然需要在XAML中找到IEnumerable来设置它。您试图用固定列表填充组合框的列表,还是它会随着时间的推移而改变?它是固定的。基本上,我有两个不同的组合框选项列表,当复选框的状态从选中变为未选中时,应将其切换到/退出。请尝试ItemsSource而不是Items。我可以使用ItemsSource,但是我仍然需要在XAML中找到一个IEnumerable来设置它。您试图用固定列表填充组合框的列表,还是随着时间的推移而改变?它是固定的。基本上,我有两个不同的组合框选项列表,当复选框的状态从选中变为未选中时,应将其切换到/退出。请尝试ItemsSource而不是Items。我可以使用ItemsSource,但是我仍然需要在XAML中找到一个IEnumerable来设置它。您试图用固定列表填充组合框的列表,还是随着时间的推移而改变?它是固定的。我基本上有两种不同的想法