【发布时间】:2019-02-08 05:32:26
【问题描述】:
这必须是解决此问题的常见问题,但我找不到。 我需要能够在文本框中设置一个值,但文本框通常由外部源(在本例中为 PLC)更新。当它从源更新时,我想在文本框中显示更新的值(而不是在用户键入时),而不调用从依赖属性的设置器调用的方法。
我有一个绑定到视图模型 xaml 代码中的依赖属性的基本文本框。
<TextBox Text="{Binding A}" />
属性看起来像这样
private string _a;
public string A
get
{
return _a;
}
set
{
if (value != _a)
{
Set(ref _a, value);
SomeMethod(value);
}
}
从这里我尝试更新字段
_a = ValueFromAnotherSource;
除非我运行,否则不会更新视图
RaisePropertyChanged(String.Empty);
在这种情况下,如果值更新,用户输入的输入将被覆盖。
或者我可以写信给属性
A = ValueFromAnotherSource;
但是 SomeMethod(value) 被调用,这不是我想要的,只有当用户在屏幕上输入改变值时才应该调用它
【问题讨论】:
-
函数
Set触发NotifyPropertyChanged对吧? -
这永远不会令人满意。想象一下,用户将输入焦点永远留在了 TextBox 中。它永远不会显示视图模型中的更新值。您实际上需要两个 UI 元素,一个用于输入,一个用于输出。
-
绑定 sourceupdated 事件可用于驱动数据从文本框传输到视图模型。