我需要将ListBox中所选项目的数量限制为2.如何执行此操作?是否可以避免使用事件并在XAML中执行此操作?
答案 0 :(得分:8)
据我所知,没有内置的方法可以做到这一点,所以你将不得不编写一些代码。
您可以通过将SelectionMode
设置为Multiple
或Extended
(请参阅here了解差异)将ListBox设置为多选,并附加到{{1}事件。当事件被提出时,修改选择你认为合适的方式(你如何做到这将取决于你希望它如何工作......如果他们选择第三个,是否立即删除?或第一个获得删除 - 有效地删除FIFO或LIFO。)
修改强>
我的坏,我把错误的文章联系起来了。
答案 1 :(得分:1)
以下是如何将选择限制为仅两个项目的示例
对于以下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>
事件将类似于
public void MyListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (this.MyListView.SelectedItems.Count > 2)
{
this.MyListView.SelectedItems.RemoveAt(0);
}
}
答案 2 :(得分:1)
我做了一个这样的行为,我可以将我想要选择的元素数量绑定到dependencyproperty。
它是这样使用的,附在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);
}
}
}