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)
我目前使用行为类的唯一原因是绑定我的自定义依赖项属性,有没有办法用事件代替这样做?
对于任何对这个问题的答案感兴趣的人,WPF 论坛上的一位 MS 工程师为我解决了这个问题。您不是直接绑定到事件,而是绑定到封装该事件的包装器对象。然后,该行为可以从其 DP 中获取对包装器的引用,并对其执行所需的操作,即订阅事件、触发事件等。
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |