使用 ListBox 本身内部的“添加”按钮添加 ListBoxItem
Posted
技术标签:
【中文标题】使用 ListBox 本身内部的“添加”按钮添加 ListBoxItem【英文标题】:Add ListBoxItem with "Add" button that is inside the ListBox itself 【发布时间】:2019-04-29 09:07:11 【问题描述】:所以,问题是:我有一个 ListBox,里面有一个 ItemsTemplate,还有一个按钮已经进入 ItemsCollection,女巫是“添加项目”按钮。这个想法是通过单击“添加项目”按钮从该列表框中的 ItemsTemplate 添加一个新项目,在我想要添加新项目的同一个列表框中的另一个 ListBoxItem 中。我知道我可以将“添加项目”按钮留在 ListBox 之外,但我真的很喜欢按钮位于 ListBox 最底部的想法,因为它更直观,所以我必须从模板中添加一个新项目,但不能只绑定 ItemsSource 属性,因为在使用它之前它必须为空,并且它具有带有添加按钮的 ListBoxItem,这是其中唯一的非模板项,然后我必须确保按钮移至列表底部。
找了好久,没找到。
【问题讨论】:
使用正常流程将项目添加到列表框 代替itemtemplate,定义两个用于2种数据类型的模板,分别称为rowVM和buttonVM。 rowVM 模板到您现在拥有的任何内容中。 ButtonVM 模板转换成一个按钮。绑定一个 observablecollection 【参考方案1】:您可以将CompositeCollection
用作ItemSource
作为您的ListBox
,因此您的“添加项目”按钮始终是您的ListBox
中的最后一个项目,也不属于您的源集合。
<ListBox>
<ListBox.Resources>
<!-- Your Datatemplates -->
</ListBox.Resources>
<ListBox.ItemsSource>
<CompositeCollection>
<!-- Bind your original ItemsSource here, in my case 'Collection' -->
<CollectionContainer Collection="Binding Source=StaticResource mainViewModel, Path=Collection"/>
<!-- Focusable="False" not selectable -->
<ListBoxItem Focusable="False">
<Button Command="Binding Source=StaticResource mainViewModel, Path=AddItemCommand">Add Item</Button>
</ListBoxItem>
</CompositeCollection>
</ListBox.ItemsSource>
</ListBox>
另请参阅How do you bind a CollectionContainer to a collection in a view model? 为什么需要在绑定中指定源
【讨论】:
以上是关于使用 ListBox 本身内部的“添加”按钮添加 ListBoxItem的主要内容,如果未能解决你的问题,请参考以下文章
将数据绑定到 ListBox 并将列表发布到数据库 mvc5