【问题标题】:WPF Different ItemsSource for a Combobox组合框的 WPF 不同 ItemsSource
【发布时间】:2013-11-28 10:47:37
【问题描述】:

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

我该怎么做?我是否需要在我的 ViewModel 中为我的组合框实现一个包装类? (此包装类将获取对象列表、布尔值列表是/否、枚举值列表)。

【问题讨论】:

  • 你的选择模式是什么?是行还是单元格?
  • 嗨,这是单元格模式。
  • 嗨,谢谢,但也许你不明白我的意思。我在帖子中添加了一些信息。
  • 从单元格中听可以得到列,然后你就会知道选择了哪一列

标签: c# wpf xaml combobox


【解决方案1】:
 <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>

【讨论】:

    【解决方案2】:

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

    <Style Target={x:Type ComboBox}>
    

    【讨论】:

    • 酷,谢谢。但这意味着,我应该在 ViewModel 中有一个属性用于列表。拥有一个始终提供正确值的属性不是更好吗?
    • 这并不容易,因为您可以将数据源绑定到一个且只有一个属性。我无法告诉您如何处理包含两种类型列表的对象。
    • 是的,您必须在 viewModel List 和 List 中定义两个不同的属性,或者您只需在枚举中添加是或否,并根据您的数据网格列刷新您dataSource 与 linq 类似 list = list.Where(l => l.val != enum.yes && l.val!= enum.No)
    • 好吧,很酷,你是对的。我发现将我的组合框绑定到一个且只有一个属性太难了。我会走这条路。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2014-02-15
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多