在某些情况下,WPF MVVM 会阻止绑定 SelectedValue 以更改值

本文关键字:SelectedValue 绑定 情况下 MVVM WPF | 更新日期: 2023-09-27 18:33:53

我有一个视图模型,其中包含一个 SelectedDocument 属性和一个 Documents 属性。

该 UI 具有一个自定义列表视图控件,该控件在视图模型上将 ItemsSource 绑定到文档,将 SelectedValue 绑定到"选定文档"。

现在,在某些情况下,在所选文档的设置器的视图模型中,我需要发出一个对话框服务消息,询问某些内容,并且在取消的情况下,我需要阻止更改 SelectedDocument。

我可以这样做,但是当我不更改视图模型中属性的值时,我会使 UI 和视图模型不同步。

由于双向绑定正在更新源时调用属性的 setter,因此可能要做一些事情。

如何解决这个问题?

谢谢

在某些情况下,WPF MVVM 会阻止绑定 SelectedValue 以更改值

您必须撤消更改,但不能直接在 Setter 中执行此操作,而必须使用此处所述的调度程序。

至于在MVVM中使用调度程序,有各种关于使用IDispatcher接口的帖子,可以在这里或这里或这里找到(在MEFedMVVM.Services.Contracts命名空间下查看)。你必须看看哪一个适合你。

我假设你使用的是.Net 3.5?这是一个"已知问题",并且已在 .Net 4 中更改(请注意,我说更改不一定修复!

这里有一篇关于更改的博客文章,它还指出了一些关于如何处理 3.5 中问题的建议

https://web.archive.org/web/20150925210516/https://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

如果对话框被取消,则应调用 PropertyChange 事件事件。这样,UI 层将通过重置 SelectedDocument 来响应。