WPF:如何触发GUI行为以响应视图模型事件?

Mar*_*man 6 data-binding wpf conceptual mvvm

我正在开发一个WPF/MVVM应用程序,我有一个列表框绑定到ViewModel中的数据.在不同的点我需要视图模型使列表框滚动到给定的元素.

如何在不创建自定义控件的情况下执行此操作,同时仍保持良好的关注点分离?

我目前通过在视图层中创建一个自定义行为类来实现它的工作,该行具有依赖项属性VisibleIndex,然后XAML代码绑定到视图模型中的整数:

<ListBox x:Name="myListBox" 
        local:ListBoxVisibilityBehavior.VisibleIndex="{Binding VisibleIndex}">
Run Code Online (Sandbox Code Playgroud)

设置整数时,它会触发依赖项属性更新处理程序,该处理程序告诉列表框滚动到关联的索引.

这看起来有点hacky,因为依赖属性值永远不会被列表框更改,并且更新处理程序仅在值更改时被调用,因此确保相关项可见的唯一方法是执行以下操作:

// view-model code
this.VisibleIndex = -1;
this.VisibleIndex = 10;
Run Code Online (Sandbox Code Playgroud)

我目前使用行为类的唯一原因是绑定我的自定义依赖项属性,有没有办法用事件代替这样做?

Mar*_*man 0

对于任何对这个问题的答案感兴趣的人,WPF 论坛上的一位 MS 工程师为我解决了这个问题。您不是直接绑定到事件,而是绑定到封装该事件的包装器对象。然后,该行为可以从其 DP 中获取对包装器的引用,并对其执行所需的操作,即订阅事件、触发事件等。

  • 非常非常晚总比没有好:https://social.msdn.microsoft.com/Forums/vstudio/en-US/2e5bf19d-db96-4dfd-b240-55b89ef2248b/anything-like-attached-properties-but-with-事件?论坛=wpf (2认同)