这必须是解决此问题的常见问题,但我找不到它。
我需要能够在文本框中设置一个值,但文本框通常由外部源(在本例中为 PLC)更新。当它从源更新时,我想在文本框中显示更新的值(而不是在用户键入时)而不调用从依赖属性的 setter 调用的方法。
我有一个绑定(bind)到 View 模型 xaml 代码中的依赖属性的基本文本框。
<TextBox Text="{Binding A}" />
该属性(property)看起来像这样
private string _a;
public string A
get
{
return _a;
}
set
{
if (value != _a)
{
Set(ref _a, value);
SomeMethod(value);
}
}
从这里我尝试更新该字段
_a = ValueFromAnotherSource;
除非我运行,否则不会更新 View
RaisePropertyChanged(String.Empty);
在这种情况下,如果值更新,则会覆盖用户输入时的输入。
或者我可以写信给酒店
A = ValueFromAnotherSource;
但是 SomeMethod(value) 被调用,这不是我想要的,只有当用户在屏幕上键入的值发生更改时才应该调用它
最佳答案
我敢肯定,编码标准神会为此而责备我:
private string _a;
private bool _manuallySettingA;
public string A
{
get { return _a; }
set
{
if (value != _a)
{
Set(ref _a, value);
if(!_manuallySettingA)
SomeMethod(value);
}
}
}
public void ManuallySetA(string value)
{
_manuallySettingA = true;
A = value;
_manuallySettingA = false;
}
关于c# - WPF MVVM数据绑定(bind)文本框依赖覆盖输入或不更新输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579214/