1

我有一个具有 SelectedDocument 属性和 Documents 属性的视图模型。

Ui 有一个自定义 ListView 控件,其中 ItemsSource 绑定到 Documents,SelectedValue 绑定到 Viewmodel 上的 SelectedDocument。

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

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

它可能有一些事情要做,因为当双向绑定更新源时调用了属性的设置器。

如何解决?

谢谢

4

3 回答 3

3

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

至于在 MVVM 中使用 Dispatcher,有各种关于为此使用IDispatcher接口的帖子,可以在此处此处此处找到(查看 MEFedMVVM.Services.Contracts 命名空间下)。你必须看看其中哪一个适合你。

于 2012-05-10T22:09:46.950 回答
1

我假设您使用.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/

于 2012-05-11T03:33:09.557 回答
0

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

于 2012-05-10T21:47:58.817 回答