Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于另一个控件的状态以XAML样式填充WPF组合框项_C#_Wpf_Xaml_Combobox - Fatal编程技术网

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来设置它。您试图用固定列表填充组合框的列表,还是随着时间的推移而改变?它是固定的。我基本上有两种不同的想法