如何判断SelectionChanged事件是否是WPF中ViewModel中UI交互或程序更改的结果?

时间:2015-01-29 11:07:47

标签: wpf events listbox

我有ListBox从我的视图模型到SelectedItem的双向绑定。更新视图模型后,将更新SelectedItem并触发SelectionChanged事件。通过UI中的直接用户交互也会触发SelectionChanged,例如用鼠标点击,触摸选择,键盘输入。

如果更改来自UI互动,我想在SelectionChanged 中执行某项操作。

SelectionChangedEventArgs中似乎有符合此要求的属性(例如OriginalSourceUserInitiated),但两种情况之间没有差异。

区分两种可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SourceUpdatedTargetUpdated个活动。如果您将Binding的NotifyOnSourceUpdatedNotifyOnTargetUpdated属性设置为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或其他任何内容中使用。