将“添加新”项添加到ComboBox

时间:2013-01-10 12:11:19

标签: wpf model combobox

好吧,这对我来说听起来微不足道,但我无法找到答案。 我有一个正常的ComboBox,它完美无缺。

我想要做的是添加element (作为drop-down list 的最后一项),这只是添加新 > label;当选择这个项目时,我想打开一个窗口,允许我定义我正在添加的element的属性。

现在我有以下内容:

<ComboBox x:Name="myCombo"
    SelectedValue="{Binding Name, UpdateSourceTrigger=PropertyChanged}"
    ItemsSource="{Binding Definitions}" 
    SelectedValuePath="Name"
    DisplayMemberPath="Name"
    SelectionChanged="CheckToAdd" />

CheckToAdd函数是这样的:

private void CheckToAdd(object sender, SelectionChangedEventArgs e)
{
    if (((myViewModel)e.AddedItems[0]).Name.Value.Equals("Add new"))
    {
        AddNewItem(sender, null);
    }
}

我所做的是在我的element中有一个虚拟 Definitions,其添加新Name。使用这种方法可以使所有工作,但它是丑陋的IMO (因为问题只是view的事情,所以我不认为混淆VM or the Model是正确的

任何人都有更好的主意吗?

3 个答案:

答案 0 :(得分:2)

对于WPF,没有相应的ASP.NET AppendDataBoundItems。您可以通过修改ControlTemplate来获取某个位置,或者您可以简化当前的方法以使其更具可读性。类似的东西:

private void CheckToAdd(object sender, SelectionChangedEventArgs e) {
    if (cbo.SelectedIndex == Definitions.Count()) {
        AddNewItem(sender, null);
    }

答案 1 :(得分:0)

我认为这确实属于对已接受答案的评论,但我没有足够的代表。

你能详细说明一下:

  1. 如何确保element name“添加新”留在底部。
  2. 如何在添加虚拟项目时从ViewModel中的模型中包装Collection

答案 2 :(得分:-2)

如果您在wpf中遵循绑定,则必须在集合中插入项目(此处为定义)并使此集合通知(使用INotifyPropertyChanged),然后在插入新项目时自动更新ComboBox,这不仅是一种方法,而且这是最好的做法

请参阅以下链接,了解如何实施INotifyPropertyChanged

http://wpftutorial.net/INotifyPropertyChanged.html