Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF。列表框。如何将所选项目的最大数量限制为2个?_C#_.net_Wpf_Xaml_Listbox - Fatal编程技术网

C# WPF。列表框。如何将所选项目的最大数量限制为2个?

C# WPF。列表框。如何将所选项目的最大数量限制为2个?,c#,.net,wpf,xaml,listbox,C#,.net,Wpf,Xaml,Listbox,我需要将列表框中所选项目的数量限制为2。如何做到这一点?是否可以避免使用事件并在XAML中执行此操作?据我所知,没有内置的方法来执行此操作,因此您必须编写一些代码 您可以通过将SelectionMode设置为Multiple或Extended(请参阅区别)并附加到SelectionChanged事件,将列表框设置为multi-select。在引发事件时,修改您认为合适的选择方式(您如何做将取决于您希望它如何工作…如果他们选择第三个,它是否立即被删除?或者第一个是否被删除-实际上是FIFO或LIF

我需要将列表框中所选项目的数量限制为2。如何做到这一点?是否可以避免使用事件并在XAML中执行此操作?

据我所知,没有内置的方法来执行此操作,因此您必须编写一些代码

您可以通过将
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);
        }
    }
}