C# WPF。列表框。如何将所选项目的最大数量限制为2个?
我需要将列表框中所选项目的数量限制为2。如何做到这一点?是否可以避免使用事件并在XAML中执行此操作?据我所知,没有内置的方法来执行此操作,因此您必须编写一些代码 您可以通过将C# WPF。列表框。如何将所选项目的最大数量限制为2个?,c#,.net,wpf,xaml,listbox,C#,.net,Wpf,Xaml,Listbox,我需要将列表框中所选项目的数量限制为2。如何做到这一点?是否可以避免使用事件并在XAML中执行此操作?据我所知,没有内置的方法来执行此操作,因此您必须编写一些代码 您可以通过将SelectionMode设置为Multiple或Extended(请参阅区别)并附加到SelectionChanged事件,将列表框设置为multi-select。在引发事件时,修改您认为合适的选择方式(您如何做将取决于您希望它如何工作…如果他们选择第三个,它是否立即被删除?或者第一个是否被删除-实际上是FIFO或LIF
SelectionMode
设置为Multiple
或Extended
(请参阅区别)并附加到SelectionChanged
事件,将列表框设置为multi-select。在引发事件时,修改您认为合适的选择方式(您如何做将取决于您希望它如何工作…如果他们选择第三个,它是否立即被删除?或者第一个是否被删除-实际上是FIFO或LIFO删除)
编辑:
我的错,我链接到了错误的文章 下面是一个如何将选择限制为仅两项的示例 对于在以下XAML中定义的ListView
<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>
我做了一个这样的行为,可以将我想要选择的元素数量绑定到dependencyproperty 它是这样使用的,附加到
ListView
<i:Interaction.Behaviors>
<behaviors:LimitSelectionBehavior Limit="2" />
</i:Interaction.Behaviors>
注意:在WPF中,SelectionMode枚举如何在引发事件时以编程方式取消选择所选项目?谢谢您的示例!如果我是OP,我会选择它作为我的解决方案。
<i:Interaction.Behaviors>
<behaviors:LimitSelectionBehavior Limit="2" />
</i:Interaction.Behaviors>
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);
}
}
}