【发布时间】:2014-02-09 21:42:51
【问题描述】:
我有一个允许用户输入数据的 UserControl。我试图强制当焦点从用户控件中移除时,数据验证发生并且用户必须返回并更正数据或取消所做的更改。
我尝试过使用用户控件 LostFocus,但似乎每次用户在用户控件内的控件之间移动时都会调用它,而不仅仅是当用户控件失去焦点时。此外,似乎无法查看焦点移动到的位置并防止焦点丢失 - 即强制用户返回并纠正错误。
我来自 Winforms 背景,这很容易实现,但我在 WPF 中看不到任何简单的方法。
有人可以帮忙吗?
谢谢
附:示例代码(不起作用...)
private void UserControl_LostFocus(object sender, RoutedEventArgs e)
{
if (IsModified)
{
e.Handled = true;
btnSave_Click(this, e);
}
}
只要用户控件内的控件失去焦点,就会调用上述方法。因此,如果用户控件有 3 个文本框,当用户在每个文本框之间移动时,每次都会调用此事件。如果焦点从用户控件本身移开,我只想处理该事件。然后我想提示用户“请在离开此页面之前保存或取消您的更改”。而且,只有当焦点移动到应用程序的另一部分时,而不是,例如,如果用户在应用程序之外使用 ALT-Tabbed。
【问题讨论】:
-
这不是我们必须在 WPF 中做的事情......或者无论如何都不要手动这样做。请查看 MSDN 上的
Binding.UpdateSourceTriggerProperty 页面。 -
按照本网站的惯例,按照Help Center的How do I ask a good question?页面上的描述,您可能会发现您会得到更多的答案。请添加一个simplified example of your code,它仍然可以清楚地表明您的问题。
-
谢谢你,但我已经看过这个区域,它不适合我想要的,我对你的评论感到困惑“这不是我们在 WPF 中必须做的事情” .我想要做的并不罕见——数据只有在用户点击提交后才会提交。这不是问题。问题是如何防止用户在提交或取消更改之前离开控件。所以,据我所知,这与数据绑定无关,而是 UI 控制。
-
您不必手动处理事件来启动 WPF 中的数据验证...如果操作正确则不会。请阅读 MSDN 博客上的 Data Validation in 3.5 页面以获得更多帮助...我会专注于页面中更有用的
IDataErrorInfo部分,甚至可能还会查看 MSDN 上的INotifyDataErrorInfopage。 -
再次感谢您的评论。我已经在整个应用程序中广泛使用了 IDataErrorInfo 和其他数据验证机制。这不是关于数据验证的问题或问题。我只是不希望用户在保存(在这种情况下数据库将被更新)或取消更改之前离开用户控件。请远离数据验证——这不是我要问的!数据已经过验证但未提交到数据库。我希望用户在移动到应用程序的另一个区域/屏幕之前必须单击保存或取消。
标签: wpf user-controls