大家好,我有一个下拉框,它是绑定到一组元素的。但除了这些元素之外,我想再加入另一个项目,这个项目应该显示文本“新...”。我的想法是如果他们选择正常的元素之一,它将执行涉及该元素的某些操作。如果他们选择“新”元素,则会带他们到一个屏幕,让他们可以创建一个新项目。问题在于,当你数据绑定时,你不能给它添加另一个项目,而且没有添加虚拟项到元素列表中的必要性... 这是否是创建基于ComboBox的新控件的机会,它具有“DefaultElement”属性?(以及所有相关的模板和命令绑定等)
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;
}
}
您可以将这些对象的集合托管在数据上下文(ViewModel)中,并根据IsDummy
适当处理选择。虽然没有内置此功能的控件那么自动化,但它非常简单,很可能可以轻松地使其通用并可重用。
将ItemsSource属性设置为一个包含新项和绑定集合的CompositeCollection,然后基于选定的索引或类似物检测该项的选择。
示例代码:
<ComboBox>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem>Add New Item...</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
CompositeCollection 的 MSDN 文档:http://msdn.microsoft.com/zh-cn/library/system.windows.data.compositecollection(v=vs.110).aspx