我有ListBox
从我的视图模型到SelectedItem
的双向绑定。更新视图模型后,将更新SelectedItem
并触发SelectionChanged
事件。通过UI中的直接用户交互也会触发SelectionChanged
,例如用鼠标点击,触摸选择,键盘输入。
如果更改来自UI互动,我想在SelectionChanged
中执行某项操作。
SelectionChangedEventArgs
中似乎有符合此要求的属性(例如OriginalSource
和UserInitiated
),但两种情况之间没有差异。
区分两种可能吗?
答案 0 :(得分:1)
您可以使用SourceUpdated和TargetUpdated个活动。如果您将Binding的NotifyOnSourceUpdated和NotifyOnTargetUpdated属性设置为True,那么您可以处理这些事件以区分更改的来源:
<ListBox ItemsSource="{Binding TestCollection}"
SelectedItem="{Binding TestSelection, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
SourceUpdated="ListBox_SourceUpdated" TargetUpdated="ListBox_TargetUpdated"
SelectionChanged="ListBox_SelectionChanged" />
在SelectionChanged
之前调用这些事件,因此您可以在其处理程序中执行操作,也可以设置一些标记以在SelectionChanged或其他任何内容中使用。