5

好的。这似乎是一个非常基本的用例,但由于某种原因,我在寻找跨控件类型的通用解决方案时遇到了问题。

这是用例:

带有任何可编辑控件的表单会呈现给用户。(文本框、组合、网格等)。

用户编辑控件中的值并跳出。
期望是我可以连接到诸如 Lost Focus 之类的事件并使用更改的值执行“foo”。

然后,用户将焦点返回给控件,并在不进行编辑的情况下跳出标签。期望是,无论我连接到什么事件,我都可以检查值是否已更改。

控件中是否有一个常见事件仅在用户完成编辑时触发(例如 tab out 或 enter )并允许我检查先前状态与当前状态?

4

4 回答 4

1

Jason,您可能希望查看 WPF 中的 Binding 和 DependencyProperties,而不是跟踪表单中的事件。您可以将一个类绑定到您的表单,该表单公开要更改的属性。使用 DependancyProperties 会触发一个名为“PropertyChanged”的事件。

不幸的是,这是一个广泛的主题,但您将真正获得 WPF 编程模型的全部好处。搜索“wpf 中的依赖属性”会给你一些很好的例子。

于 2012-10-19T14:54:08.000 回答
0

正如前面的答案所建议的那样,您最好实现一个视图 - 视图模型结构,您的视图模型已经实现了 INotifyPropertyChanged,从而允许您绑定到将宣布它们对 UI 的更改的属性。

如果您不想这样做,您最终可以在您的输入元素上订阅 PreviewKeyUp 事件,检查是否已按下 Tab 键并从那里继续。

于 2013-03-20T10:28:34.537 回答
0

您可能感兴趣的是实现 INotifyPropertyChanging(不仅仅是 INotifyPropertyChanged)。

正如这个问题的答案所指出的,INotifyPropertyChang ING不会阻止您更改值,而是检测何时发生更改,以及新值将是什么。

希望它有助于您的解决方案需求。

于 2012-10-22T11:45:13.993 回答
0

我想这可能是焦点问题。存在两种不同的焦点类型:键盘焦点和逻辑焦点。具有键盘焦点的控件是具有插入符号的控件,在用户按键的和输入的控件过程中。a 控件可能具有逻辑焦点但没有键盘焦点。请在 MSDN 文章“输入概述”中检查这一点。关于另一个问题,也许您可​​以处理 TabControl.SelectedItemChanged 以在选项卡项选择更改时进行事件。希望这对你有帮助...

于 2012-10-19T15:18:57.050 回答