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

Wpf 在程序退出之前更新依赖项属性,wpf,mvvm,dependency-properties,mvvm-light,Wpf,Mvvm,Dependency Properties,Mvvm Light,我在RichTextBox上创建了一个类型为Binary的依赖属性,它允许我绑定到ViewModel中二进制格式(字节[])的FlowDocument。这很好,属性可以正确地进行转换 每当RichTextBox失去焦点时,依赖项属性的值就会用FlowDocument的新二进制表示形式更新 我的问题是,如果我一直在使用RichTextBox并关闭窗口,RichTextBox不会失去焦点,因此依赖项属性不会用FlowDocument的新二进制表示更新,因此新的更改不会提交到数据库。在我的ViewMo

我在RichTextBox上创建了一个类型为Binary的依赖属性,它允许我绑定到ViewModel中二进制格式(字节[])的FlowDocument。这很好,属性可以正确地进行转换

每当RichTextBox失去焦点时,依赖项属性的值就会用FlowDocument的新二进制表示形式更新

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

如果用户单击关闭窗口,RichTextBox不会失去焦点,如何使dependency属性自我更新? 我进行了以下头脑风暴:

  • 告诉依赖项属性通过消息广播进行自我更新。我不清楚如何在dependency属性中注册消息侦听器
  • 直接查询RichTextBox,获取文档,手动将其转换为二进制对象
  • 获取视图以将焦点移动到虚拟控件,以便依赖项属性现在会自动更新
  • 你们觉得怎么样


    更新:dependency属性的on changed事件添加了一个事件处理程序,它正在等待RichTextBox释放焦点。就是这个处理程序用它的新值更新依赖项

    使用“PropertyChanged”的UpdateSourceTrigger

    比如:

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

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


    在我的例子中,窗口中有几个可编辑控件,因此我不必使用虚拟控件。

    是什么阻止了您处理窗口的关闭/关闭事件以及移动焦点或更新绑定?

    这意味着对于RichTextBox中的每一个小更改,需要创建一个表示二进制FlowDocument的新对象,并将其设置为BinaryFlowDocument依赖项属性的值。我也尝试了上面的方法,但是依赖项属性从未更新,除非焦点确实丢失。如果我直接绑定到RichTextBox的Document属性,这可能是一种方法。那么您将视图模型绑定到什么?我们如上所述将视图模型绑定到控件,它起到了处理作用。我绑定到我创建的BinaryFlowDocument的依赖属性。RichTextBox已扩展以保存此属性。我将尝试通过附加属性移动焦点,如本文所述: