C# WPF列表框,自动添加";新元素“;线
在我的控件中有一个C# WPF列表框,自动添加";新元素“;线,c#,wpf,mvvm,listbox,C#,Wpf,Mvvm,Listbox,在我的控件中有一个列表框。每个ListBoxItem(通过ItemTemplate)显示为一个组合框,其ItemsSource是我控件的ViewModel中的一个可见集合 该组合框旁边是一个用于从列表中删除元素的按钮(该按钮的单击命令绑定到控件的ViewModel中的删除命令)。这可以很好地工作 现在我希望能够向列表框添加新元素。我知道如何通过单击ListBox外部或ListBox的ItemTemplate中的某个按钮来实现这一点,但是我想添加一些额外的“空”项作为我的ListBox的最后一项
列表框
。每个ListBoxItem(通过ItemTemplate)显示为一个组合框,其ItemsSource是我控件的ViewModel中的一个可见集合
该组合框旁边是一个用于从列表中删除元素的按钮(该按钮的单击命令绑定到控件的ViewModel中的删除命令)。这可以很好地工作
现在我希望能够向列表框添加新元素。我知道如何通过单击ListBox外部或ListBox的ItemTemplate中的某个按钮来实现这一点,但是我想添加一些额外的“空”项作为我的ListBox的最后一项
此“空”项应与任何其他项类似,但组合框没有选择项除外。一旦用户做出选择,就必须显示一个新的“空”项目。我希望你知道我的意思……实际上,当你在这里发布一个新问题时,它有点像“标签”编辑器;)
有什么想法吗???(在不违反MVVM规则的情况下)使用带有
CanUserAddRows=“True”
的DataGrid
而不是列表框。它将添加“新行”行,并完全按照您想要的方式运行。如果我理解正确,您似乎需要向模型中添加属性-isEmpty。这个属性应该绑定到ComboBox.Visible属性这很好(所以我将这个答案标记为“accepted”)。无论如何,我并不真的喜欢在这里使用DataGrid,DataGrid似乎是一个太强大的控件,无法解决像这样的小“问题”。其他保留原始ListBox(或者ListView)的解决方案仍然受欢迎。我尝试了一种“简单”的方法,通过使用CompositeCollection
和事件处理来实现这一点,但结果非常糟糕,也不太MVVM。正确的方法是继承列表框
并处理控件本身内部的所有逻辑(占位符项、选择和焦点更改等),但这不是一项简单的任务。