我希望有人可以帮我这个,我怀疑我做的事情很愚蠢。我绑定了TextBox
,以便Text
绑定到InputValue
。基本上,当文本值改变时,我有一个方法(Inches.Parse
),它检查值并返回格式良好的字符串。
如果解析没有错误,我希望文本框具有名为“result”的格式良好的字符串。但是,TextBox
不会显示新文字?任何帮助将不胜感激。
public string InputValue
{
get
{
return _inputValue;
}
set
{
if (_inputValue != value)
{
bool error;
string result = Inches.Parse(value, 64, out error);
if (error != IsValid)
{
IsValid = error;
}
if (!error)
{
_inputValue = result;
}
else
{
_inputValue = value;
}
NotifyPropertyChanged("InputValue");
}
}
}
答案 0 :(得分:3)
这是一个明显可以在dot net 4.0中修复的错误/问题
基本上问题是如果绑定设置了一个属性,它在setter期间不会查找NotifyPropertyChanged
。您可以通过使用调度程序在主ui线程上调用NotifyPropertyChanged
来解决此问题。这样就完成了
Application.Current.Dispatcher.BeginInvoke((Action)delegate { NotifyPropertyChanged("InputValue"); });
把它放在你的二传手中,你应该没问题。
答案 1 :(得分:1)
问题似乎是TextBox
在更新它自己绑定的源属性期间不会更新显示的值。
解决方法可能是设置此绑定表达式
{Binding Path=InputValue, Mode=TwoWay,UpdateSourceTrigger=Explicit}
请注意UpdateSourceTrigger=Explicit
这表示您将手动更新来源
然后您将处理程序添加到TextBox
LostFocus
事件(因此我们确定用户已完成编辑)
textBox1.LostFocus +=
(s, e) =>
{
var text = textBox1.Text;
[DataSource].InputValue = text;
};
因此当TextBox
失去焦点时,数据源中的值将被更新和格式化,然后TextBox
将被反弹。
希望这会对你有所帮助。