【发布时间】:2013-12-30 21:49:07
【问题描述】:
我找到了一些关于如何从视图模型中选择控件的示例,但一定不能在正确的术语上搜索如何让它以相反的方式工作。基本上我只想在我的视图模型中更新一个布尔值,当一个文本框正在被编辑时,当它没有被编辑时。我认为这与想知道它何时获得和失去焦点是一样的。
所以我创建了一个 FocusExtension 类,如下所述:Set focus on textbox in WPF from view model (C#)
但它不会触发我的视图模型属性“EditingMyTargetField”的访问器,并在我的 XAML 中使用以下行:
my:FocusExtension.IsFocused="{Binding EditingMyTargetField}"
【问题讨论】:
-
一般来说,ViewModel 不应该真正关心值是否在更改(在 UI 中),而只是在它更改时才关心。如果您仅出于 UI 原因设置标志,则可以使用代码隐藏或 UI 中的触发器。
-
原因是因为我想在编辑文本框时启用特定按钮,并在不编辑时禁用它。我将 IsEnabled 属性绑定到与该按钮有关的命令的 CanExecute 方法。 CanExecute 方法引用了我的 ViewModel 中的一个属性,该属性还需要与是否正在编辑文本框相关联。对于另一个文本框,如果在构成表单的最后一个文本框上被选中,我需要让我的一个命令以一种方式运行,如果不是,则以不同的方式运行。 (我不控制应用要求)。
-
要记住的一点是,这种行为可能是您想要进行单元测试的行为,在这种情况下,绝对不可以使用代码隐藏或触发器。