Databound WPF组合框与'新...'项目

问题描述:

大家好
我有一个数据绑定到元素列表的组合框。但除了这些元素列表之外,我还想要另一个项目。此项目应显示文本'新...'
这个想法是,如果他们选择一个正常的元素,它会执行一些涉及该元素的操作。如果他们选择'新'元素,它会把他们带到一个屏幕上,他们可以创建一个新的项目。
问题是,当你的东西进行数据绑定您没得到另一个项目添加到它的选项,并没有添加伪项元素列表的问题...Databound WPF组合框与'新...'项目

这是一个机会,创造基于具有'DefaultElement'属性的ComboBox的新控件? (与所有相关联的模板和命令绑定等)

为此,我以前为普通类型创建了一个虚拟包装类,允许您绑定到一个包含大部分正确值的列表以及“新建”。 ..“一个,例如

public class DisplayClass 
{ 
    public DisplayClass(ModelClass mc) 
    { 
     this.mc = mc; 
    } 

    public string Name 
    { 
     get { return this.mc != null ? this.mc.Name : "New..."; } 
    } 

    public bool IsDummy 
    { 
     return this.mc == null; 
    } 

    public ModelClass Model 
    { 
     return this.mc; 
    } 
} 

然后,您可以承载的这些集合中的数据上下文(视图模型),并妥善处理基于IsDummy选择。它不像内置此功能的控件那么自动,但非常简单,可能很容易使其变得通用并且可重用。

+0

这似乎符合我的标准......它的困难,因为你和VC的回答基本上是相同的,但我会立即采取这因为它有一个例子 – TerrorAustralis 2010-10-26 10:10:38

+0

不用担心,很高兴看到你找到了答案 – 2010-10-26 13:13:16

请记住,您绑定的是面向UI的项目集合,这些项目可能与业务或数据实体不同。

如果我是你,我会在绑定集合的第一个位置插入一个'new'实体,并在我的viewmodel中检测它以在用户选择它时触发相应的操作。

将ItemsSource属性设置为具有新项目的CompositeCollection并将集合绑定在一起,然后根据所选索引或类似内容检测该项目的选择。

示例代码:

<ComboBox> 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
     <ComboBoxItem>Add New Item...</ComboBoxItem> 
     <CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

MSDN为CompositeCollection:http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

+0

很好的答案。谢谢。 – 2014-04-08 11:36:50