Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 组合框的WPF不同项目资源_C#_Wpf_Xaml_Combobox - Fatal编程技术网

C# 组合框的WPF不同项目资源

C# 组合框的WPF不同项目资源,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我想将布尔值、对象列表和枚举值绑定到组合框。根据datagrid的列弹出一个对话框,我加载一个对象列表(Object1.Name..ObjectN.Name是名称,ObjectD1..ObjectDN是Id),我加载一个EnumValue列表(EnumItem1..EnumItemN是名称,EnumValue1..EnumValueN是Id)或布尔值列表(Yes/No是名称,0/1是Id) <Style Target={x:Type ComboBox}> <Style.

我想将布尔值、对象列表和枚举值绑定到组合框。根据datagrid的列弹出一个对话框,我加载一个对象列表(Object1.Name..ObjectN.Name是名称,ObjectD1..ObjectDN是Id),我加载一个EnumValue列表(EnumItem1..EnumItemN是名称,EnumValue1..EnumValueN是Id)或布尔值列表(Yes/No是名称,0/1是Id)

 <Style Target={x:Type ComboBox}>
   <Style.Triggers>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value1">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue1}"/>
       </DataTrigger>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value2">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue2}"/>
       </DataTrigger>
   </Style.Triggers>
</Style>

我怎么做?我是否需要在组合框的ViewModel中实现一个wrap类?(这个wrap类将获得对象列表、布尔值列表yes/no、枚举值列表)。

好吧,对我来说,我认为您可以通过设置组合框数据源的触发器来实现您的目标。看起来像

<Style Target={x:Type ComboBox}>
 <Style Target={x:Type ComboBox}>
   <Style.Triggers>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value1">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue1}"/>
       </DataTrigger>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value2">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue2}"/>
       </DataTrigger>
   </Style.Triggers>
</Style>


 <Style Target={x:Type ComboBox}>
   <Style.Triggers>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value1">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue1}"/>
       </DataTrigger>
       <DataTrigger Binding="{Path=RowData.Row.PropertyToBeChecked}" Value="Value2">
           <Setter Property="DataSource" Value="{Binding Path=ListCorrespondingToValue2}"/>
       </DataTrigger>
   </Style.Triggers>
</Style>

您的选择模式是什么?是横排还是手机?嗨,埃兰,这是手机模式。嗨,埃兰,谢谢,但也许你不明白我的意思。我在我的帖子中添加了一些信息。通过手机收听,你可以获得该栏目,然后你就会知道选择了哪个栏目。很酷,谢谢。但这意味着,对于这种列表,我应该在ViewModel中有一个属性。拥有一个总是提供正确值的属性不是更好吗?这并不容易,因为您可以将数据源绑定到一个且仅一个属性。我无法告诉您如何处理包装两种类型列表的对象。是的,您必须在viewModel列表和list中定义两个不同的属性,或者您只需在枚举中添加yes或no,并根据您的datagrid列使用类似linq的list=list刷新数据源。其中(l=>l.val!=enum.yes&&l.val!=enum.No)好的,你说得对。我发现很难将组合框绑定到一个且只有一个属性。我将采用这种方式。谢谢!