【发布时间】:2010-09-13 06:31:27
【问题描述】:
我在 RichTextBox 上创建了 Binary 类型的依赖属性,它允许我绑定到 ViewModel 中二进制形式 (byte[]) 的 FlowDocument。这很好用,属性可以正确转换和返回。
只要 RichTextBox 失去焦点,依赖属性的值就会使用 FlowDocument 的新二进制表示进行更新。
我的问题是,如果我一直在使用 RichTextBox 并关闭窗口,RichTextBox 不会失去焦点,因此依赖属性不会使用 FlowDocument 的新二进制表示进行更新,因此不会提交新的更改数据库。在我的 ViewModel 中,我有一个 CleanUp 方法,当 ViewModel 准备好被释放时会调用它,我可以在其中保存更新的文档。
如果用户单击关闭窗口,RichTextBox 不会失去焦点,如何让依赖属性更新自身? 我集思广益:
- 通过消息广播告诉依赖属性更新自己。我不清楚如何在依赖属性中注册消息监听器。
- 直接查询RichTextBox,获取Document,手动转换成二进制对象。
- 让视图将焦点移至虚拟控件,以便依赖属性现在自行更新。
你们觉得呢?
更新:依赖属性的 on changed 事件添加了一个事件处理程序,该处理程序正在等待 RichTextBox 失去焦点。正是这个处理程序用它的新值来更新依赖。
【问题讨论】:
标签: wpf mvvm dependency-properties mvvm-light