好吧,这对我来说听起来微不足道,但我无法找到答案。
我有一个正常的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
)是正确的
任何人都有更好的主意吗?
答案 0 :(得分:2)
对于WPF,没有相应的ASP.NET AppendDataBoundItems
。您可以通过修改ControlTemplate来获取某个位置,或者您可以简化当前的方法以使其更具可读性。类似的东西:
private void CheckToAdd(object sender, SelectionChangedEventArgs e) {
if (cbo.SelectedIndex == Definitions.Count()) {
AddNewItem(sender, null);
}
答案 1 :(得分:0)
我认为这确实属于对已接受答案的评论,但我没有足够的代表。
你能详细说明一下:
element
name
“添加新”留在底部。Collection
。答案 2 :(得分:-2)
如果您在wpf中遵循绑定,则必须在集合中插入项目(此处为定义)并使此集合通知(使用INotifyPropertyChanged),然后在插入新项目时自动更新ComboBox,这不仅是一种方法,而且这是最好的做法
请参阅以下链接,了解如何实施INotifyPropertyChanged