可湿性工作基金会.列表框.如何将所选项目的最大数量限制为 2
本文关键字:最大数 项目 选项 列表 基金会 工作 可湿性 | 更新日期: 2023-09-27 17:56:46
我需要将列表框中所选项目的数量限制为 2。怎么做?是否可以避免使用事件并在 XAML 中执行此操作?
据我所知,没有内置的方法可以做到这一点,所以你将不得不编写一些代码。
通过将 SelectionMode
设置为 Multiple
或 Extended
,可以将 ListBox 设置为多选(有关差异,请参阅此处)并附加到SelectionChanged
事件。引发事件时,修改您认为合适的选择(如何执行此操作取决于您希望它如何工作......如果他们选择第三个,它会立即被删除吗?还是第一个被删除 - 有效地去除 FIFO 或 LIFO)。
编辑:
我的错,我链接到了错误的文章。
我做了一个行为,我可以将我想要选择的元素数量绑定到依赖项属性。
它是这样使用的,附在ListView
<i:Interaction.Behaviors>
<behaviors:LimitSelectionBehavior Limit="2" />
</i:Interaction.Behaviors>
这是行为类。可以修改Remove
以取消选择Limit
,现在它只是取消选择所有新添加的。
public class LimitSelectionBehavior : Behavior<ListView>
{
public static readonly DependencyProperty LimitProperty;
static LimitSelectionBehavior()
{
LimitProperty = DependencyProperty.Register("Limit", typeof(int), typeof(LimitSelectionBehavior), new PropertyMetadata(default(int)));
}
public int Limit
{
get { return (int) GetValue(LimitProperty); }
set { SetValue(LimitProperty, value); }
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionChanged += OnSelectionChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.SelectionChanged -= OnSelectionChanged;
}
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (AssociatedObject.SelectedItems.Count <= Limit)
return;
foreach (var added in e.AddedItems)
{
AssociatedObject.SelectedItems.Remove(added);
}
}
}
下面是如何将选择限制为仅两个项目的示例
对于以下 XAML 中定义的列表视图
<ListView x:Name="MyListView" ItemsSource="{Binding Path=ParentSection.MyListItems}" BorderThickness="0"
SelectionMode="Multiple" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
mvvm:FrameworkElementBehaviors.IgnoreMouseWheel="True"
SelectionChanged="MyListView_SelectionChanged">
<ListView.View>
<!--Your list view content here -->
</ListView.View>
</ListView>
该事件将如下所示
public void MyListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (this.MyListView.SelectedItems.Count > 2)
{
this.MyListView.SelectedItems.RemoveAt(0);
}
}