在程序退出之前更新依赖项属性

时间:2010-09-13 06:31:27

标签: wpf mvvm dependency-properties mvvm-light

我在RichTextBox上创建了Binary类型的依赖项属性,它允许我绑定到ViewModel中的二进制形式的FlowDocument(byte [])。这很有效,属性可以正确转换和返回。

每当RichTextBox失去焦点时,依赖项属性的值将使用FlowDocument的新二进制表示进行更新。

我的问题是,如果我一直在使用RichTextBox并关闭窗口,RichTextBox不会失去焦点,因此依赖属性不会使用FlowDocument的新二进制表示更新,因此不会将新更改提交到数据库。在我的ViewModel中,我有一个方法CleanUp,当ViewModel准备好处理时,它会被调用,我可以保存更新的文档。

如何让依赖属性更新自己,因为如果用户点击关闭窗口,RichTextBox不会失去焦点? 我头脑风暴了以下几点:

  1. 告诉依赖项属性通过消息广播更新自己。我不清楚如何在依赖项属性中注册消息监听器。
  2. 直接查询RichTextBox,获取Document,手动将其转换为二进制对象。
  3. 获取视图以将焦点移至虚拟控件,以便依赖项属性现在自行更新。
  4. 你们有什么想法?

    更新:依赖项属性的on changed事件添加了一个等待RichTextBox松散焦点的事件处理程序。正是此处理程序使用其新值更新依赖项。

3 个答案:

答案 0 :(得分:0)

使用“PropertyChanged”的UpdateSourceTrigger

类似的东西:

{Binding Path=MyProperty, 
                    Mode=TwoWay,
                    UpdateSourceTrigger=PropertyChanged}

答案 1 :(得分:0)

我曾经遇到类似的问题,我使用的解决方案是将焦点转移到另一个控件上,我从来没有遇到任何问题。

在我的情况下,窗口中有几个可编辑的控件,所以我不必使用虚拟控件。

答案 2 :(得分:0)

什么阻止你处理Window的关闭/关闭事件并移动焦点或更新绑定?