【发布时间】: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 谢谢,我现在就看看。