我有一个UserControl,允许用户输入数据。我试图强制执行当从用户控件中删除焦点时,会发生数据验证,用户必须返回并更正数据或取消所做的更改。
我尝试过使用usercontrol LostFocus,但是每当用户在UserControl内的控件之间移动时,这似乎都会被调用,而不仅仅是在UserControl失去焦点时。此外,似乎无法看到焦点移动到何处并防止失去焦点 - 即迫使用户返回并纠正事物。
我来自Winforms背景,这很容易实现,但我无法在WPF中看到任何简单的方法。
有人可以帮忙吗?
由于
P.S。示例代码(不起作用......)
private void UserControl_LostFocus(object sender, RoutedEventArgs e)
{
if (IsModified)
{
e.Handled = true;
btnSave_Click(this, e);
}
}
只要用户控件内的控件失去焦点,就会调用上面的内容。因此,如果用户控件说3个文本框,当用户在每个文本框之间移动时,每次调用此事件。如果焦点远离用户控件本身,我只想处理事件。然后我想提示用户沿着"请在离开此页面之前保存或取消您的更改。"然后,只有当焦点移动到应用程序的另一部分时才会移动,例如,如果用户已经远离应用程序ALT-Tabbed。
答案 0 :(得分:-1)
好的,我现在从你的评论中理解的是,你只是想阻止用户在保存或取消当前编辑操作之前离开视图。为了将来参考,最好以您的总体目标开始您的问题...类似于上面的句子。 然后你继续说出你尝试过的东西......你现在的问题文本。如果你这样做了,你的问题就会立即得到解答。
那么我们怎样才能做到这一点?它可能非常简单,但它取决于您更改视图的方式。当我的应用程序中的用户更改视图时,他们会单击Button
。 Button
有一个相关的Command
,在视图模型的ICommand
属性中,我加载了相关的视图。现在,当用户想要更改视图时,是否使用Command
或事件是无关紧要的。
此时你在应用程序中拥有控制权。如果尚未保存数据项,或者尚未取消编辑,则无法加载视图。我假设如果它被取消,那么你无论如何都要加载一个不同的视图,所以你只需要在加载所请求的视图之前检查项目是否已被保存。
如果选择,您还可以在此阶段设置属性,以在UI中显示用户在更改视图之前必须保存或取消的消息。这可以简单地将数据绑定到空的string
到UI中的TextBlock
,并在用户尝试加载另一个视图时将其设置为消息。