【问题标题】:WPF ListBox, automatically add "new element" lineWPF ListBox,自动添加“新元素”行
【发布时间】:2015-07-23 11:26:46
【问题描述】:

在我的控制中,我有一个ListBox。每个 ListBoxItem 都显示为(通过 ItemTemplate)Combobox,其 ItemsSource 是我的控件的 ViewModel 中的 ObservableCollection。

该组合框旁边是一个按钮,用于从列表中删除一个元素(按钮的单击命令绑定到我的控件的 ViewModel 中的删除命令)。这可以根据需要正常工作。

现在我希望能够向 ListBox 添加新元素。我知道如何通过单击 ListBox 外部或 ListBox 的 ItemTemplate 中的某个按钮来执行此操作,但我想添加某种额外的“空”项作为我的 ListBox 的最后一项。

这个“空”项目应该看起来像任何其他项目,除了 ComboBox 没有选择。一旦用户做出选择,就必须显示一个新的“空”项目。我希望你明白我的意思……当你在这里发布一个新问题时,它有点像“标签”编辑器;)

有什么想法吗??? (不违反 MVVM 规则)...

【问题讨论】:

  • 如果我理解正确,您似乎需要在模型中添加一个属性 - isEmpty。此属性应绑定到 ComboBox.Visible 属性

标签: c# wpf mvvm listbox


【解决方案1】:

不要使用ListBox,而是使用DataGridCanUserAddRows="True"。它将添加“新行”行,并完全按照您的意愿行事。

【讨论】:

  • 这很好用(所以我将此答案标记为“已接受”)。无论如何,我不太喜欢在这里使用 DataGrid,对于像这样的小“问题”,DataGrid 似乎是一个过于强大的控件。仍然欢迎保留原始 ListBox(或者可能是 ListView)的其他解决方案。
  • 我试图通过使用CompositeCollection 和事件处理来提出一种“简单”的方法,但结果很脏,而且不太像 MVVM。正确的方法是继承 ListBox 并处理控件本身内部的所有逻辑(占位符项、选择和焦点更改等),但这并非易事。
猜你喜欢
  • 2015-12-09
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多