将列表中的某些元素绑定到组合框

时间:2013-07-23 14:29:15

标签: c# wpf binding combobox

我有以下问题: 在我的视图模型中,我有一个包含对象的列表,该对象具有属性Name和Value,两个字符串。我想将列表绑定到我视图中的组合框,但我想只显示具有特定名称的元素。 列表:

名称值
FOO AAA
酒吧BBBB
FOO CCC

我想在组合框中只显示名称为foo,aaa和ccc的元素。 这里的问题是我想在视图中进行过滤,而不是在codebehind或viewmodel中。

ViewCode:

<ComboBox IsEditable="True" VerticalAlignment="Top" 
      HorizontalAlignment="Left" Width="150" Margin="60,60,0,0" 
      ItemsSource="{Binding Elements}"  
      SelectedValue="{Binding Value}" SelectedValuePath="Value" 
      DisplayMemberPath="Value" />

ViewModel代码:

private List<CustomChartElement> elements;
public List<CustomChartElement> Elements
    {
        get { return this.elements; }
    }

1 个答案:

答案 0 :(得分:0)

您可以添加一个属性来执行过滤并绑定到该属性而不是您公开的列表。

如果您有多个组合框,并且每个组合框都需要根据不同的过滤器逻辑过滤基础列表的子列表,您将不得不考虑在模型中实现每个列表,因为它在视图中是自己的属性。您可以考虑将模型封装在容器类中,该容器类公开不同的列表,以免混乱您的基本模型。

我发现了一个名为Command Binding的想法。 Here is传递参数的示例。这可能就是你要找的东西。

由于它需要ICommandSource,您可能需要查看how to implement ICommandSource for Combobox上的文章。