【问题标题】:How to allow selection of the same item many times in the ListBox如何允许在 ListBox 中多次选择相同的项目
【发布时间】:2016-10-21 12:29:09
【问题描述】:

如何在单击 ListBoxItem 时强制更改选择? 这是我创建的示例

XAML

<ListBox ItemsSource="{Binding Names}" SelectedItem="{Binding SelectedName}" />

C#

public class MainWindowViewModel : NotifyPropertyChanged
{
    private string selectedName;

    public MainWindowViewModel()
    {
        Names = NamesService.GetNames();
    }

    public ObservableCollection<string> Names { get; }

    public string SelectedName
    {
        get { return selectedName; }
        set
        {
            selectedName = value;
            //do some work here
            OnPropertyChanged();
        }
    }
}

因此,当我从列表中选择一个名称时,setter 会针对 SelectedName 命中,但如果我第二次单击同一个 Item,我需要它再次命中该 setter。

我知道我可以用不同的方式实现它,例如在其中有按钮并将其更改为 ItemsControl,然后将按钮绑定到命令等。

但我很感兴趣是否可以使用 ListBox 实现上述目标,就像我希望使用 SelectedItem 的方式一样?

谢谢:)

【问题讨论】:

  • 一点也不。当您在同一项目上再次单击时,SelectedItem 不会改变。
  • 多次选择同一个项目有什么意义?我猜你可能想使用 ItemsControl 来处理多次点击。
  • 您可以处理 ListBoxItem 上的 LeftMouseClick 事件,这是您可以多次触发单击的唯一方法。您可以通过将命令绑定到 LeftMouseClick 事件来实现,这可以使用 Interativity Trigger 来完成。示例blog.magnusmontin.net/2013/06/30/…
  • @Evangellink 关键是这个列表是一个导航列表,它只是开始导航到选定的项目。但是我有很多不同的方式在应用程序中导航,如果我然后通过不同的方法导航到某个地方并尝试导航回恰好是以前选择的项目的视图,我不能,因为据 ListBox 所知我已经选择了这个项目。希望这是有道理的。
  • @AyyappanSubramanian 谢谢,我现在就看看。

标签: wpf xaml


【解决方案1】:

这是为我做的。

注意:在这种情况下,您不需要订阅 SelectionChanged

ListBox_Jumpmarks.AddHandler(Mouse.MouseDownEvent, new RoutedEventHandler(ListBox_Jumpmarks_MouseDown), true);

private void ListBox_Jumpmarks_MouseDown(object sender, RoutedEventArgs e)
{
   // We only want to do stuff when an item of the ListBox was pressed: Handled = true
   // When the ListBox itself is pressed, we don't want to do stuff: Handled = false
   if (!e.Handled || sender != ListBox_Jumpmarks)
   {
       return;
   }

   // YOUR CODE
   // The selection of the item was done before. So you can now use ListBox.SelectedItem
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多