相关疑难解决方法(0)

将只读GUI属性推送回ViewModel

我想编写一个ViewModel,它始终知道View中某些只读依赖项属性的当前状态.

具体来说,我的GUI包含一个FlowDocumentPageViewer,它一次从FlowDocument显示一个页面.FlowDocumentPageViewer公开了两个名为CanGoToPreviousPage和CanGoToNextPage的只读依赖项属性.我希望我的ViewModel始终知道这两个View属性的值.

我想我可以使用OneWayToSource数据绑定来做到这一点:

<FlowDocumentPageViewer
    CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Run Code Online (Sandbox Code Playgroud)

如果这是允许的,那将是完美的:每当FlowDocumentPageViewer的CanGoToNextPage属性发生更改时,新值将被推送到ViewModel的NextPageAvailable属性,这正是我想要的.

不幸的是,这不编译:我收到一个错误,说'CanGoToPreviousPage'属性是只读的,不能从标记设置.显然只读属性不支持任何类型的数据绑定,甚至不支持与该属性相关的只读数据绑定.

我可以让我的ViewModel的属性为DependencyProperties,并使OneWay绑定以另一种方式运行,但我并不为关注点分离违规而疯狂(ViewModel需要对View的引用,MVVM数据绑定应该避免).

FlowDocumentPageViewer不公开CanGoToNextPageChanged事件,我不知道从DependencyProperty获取更改通知的任何好方法,没有创建另一个DependencyProperty来绑定它,这在这里看起来有点过分.

如何让ViewModel了解视图的只读属性的更改?

data-binding wpf readonly mvvm

121
推荐指数
5
解决办法
4万
查看次数

标签 统计

data-binding ×1

mvvm ×1

readonly ×1

wpf ×1