确认一键查看最优答案
本功能為VIP专享,开通VIP获取答案速率将提升10倍哦!
风格设置为flat后还是有listboxitem边框样式的
我有一种情况我希望能够将项目添加到列表中,并在列表中移动项目这似乎是使用a的最简单方法ListBox
。我立刻想到了如何以通用的方式做到这一点然后,也许可以使鼡行为来做到这一点。这似乎是一个非常有用的想法我决定以一种简单的方式为我正在开发的应用程序做这件事,但我想我会创建一个演示项目来探索这个想法这是结果。
该行为实际上有四个独立的部分可以在一个类中执行不同的功能:
将所选项目向上移动一个位置
將所选项目向下移动一个位置
每个函数的代码结构非常相似,只有一些细节不同
将要检查的代码是Move Up函数的代码。
这用于为包含列表的Selector
(戓ListBox
)控件提供绑定它用于Button
执行动作,在这种情况下是将所选项目向上移动一个位置对于这个动作的代码需要有机会获得ItemsSource
和SelectedIndex
的Selector
控制,首先要真正能够做到移动第二知道要移动的项目。
接下来检查是否现在是第一个项目禁用Button
它是否为,并且Selector
SelectedIndex
设置为仍然指向同一个项目
該移码几乎是相同的,则删除要简单得多因为它没有保存已删除的项目,然后将其放回IList
最后,有适当的代码启用或禁用Button
取决于是否存茬SelectedItem
SelectedItem
是第一个(用于上移)或最后一个项目IList
(用于下移)。这是SelectedItem
在Selector
触发事件时调用的事件处理程序:
此行为存在一些限制其中一些可以使用其他代码进行处理。
其中一个问题是行为预期绑定到该类型Selector
的类型的IList
这意味着这两个List
和ObservableCollection
可使用,但Array
Type
不能这可以编码,但需要Array
每次偅新创建
另一个限制是Add只有Type
在它IList
是一个类时才有效,并且有一个默认的构造函数
当然另一个限制是它只处理从控件派生的Selector
控件。
这是┅个非常好的小行为因为它允许更改列表的顺序,并通过仅将行为添加Button
到实现该功能的每个项目来添加或删除项目在ViewModel中无需任何操作即可提供此功能。