我正在为我的 WPF 数据输入屏幕编写撤消日志,它将跟踪所有控件的更改。当用户选择撤消时,我不仅要恢复最新的更改,还要将焦点放回其值正在恢复的控件中。我正在努力寻找将注意力重新集中的最佳方式。
我的 ViewModel 将是处理撤销日志的部分:ViewModel 的属性 setter 将在更新 DataModel 之前捕获一些“之前”状态。一种或另一种方式,“之前”状态需要包含足够的信息,以便我能够稍后将焦点放回原处。
举例来说,假设有两个数据输入字段:地址和城市。 ViewModel 对每个都有一个属性,View 对每个绑定(bind)到相应 ViewModel 属性的 TextBox 都有一个。
让我们按照用户刚刚在地址字段中键入一个值,然后单击城市字段的示例进行操作。我正在使用默认的 UpdateSourceTrigger.LostFocus 行为,因此本地址文本框失去焦点时,地址更改会被保存。到目前为止,关于如何解决这个问题,我有三种不同的想法,但我对 WPF 的了解不够多,无法知道如何使它们中的任何一个起作用。
任何人对进行上述任何工作有任何建议,或者有可能更好的替代方法?
最佳答案
我将从您的第二种方法开始。但是,我不会深入研究绑定(bind)列表,而是将控件的高亮属性硬编码为 VM 属性。
例如,这是我的虚拟机:
public class VM
{
public double Price { get; set; }
public bool PriceHighlighted { get; set; }
}
然后,将 Price 属性绑定(bind)到 TextBox 并将 TextBox 的背景绑定(bind)到 PriceHighlighted(使用值转换器)。现在 VM 可以完全控制 View 的 react 方式。当用户执行“撤消”操作时,VM 可以将所有 xxxHightlighted 设置为 false,除了您要突出显示的那个。
关于wpf - 撤消日记 : focusing the control being undone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852531/