我有一个绑定到名为Amount的十进制属性的文本框,以及一个表示Amount值不能大于100的业务规则。 这是使用适当的MVVM和INotifyPropertyChanged事件设置的。
<TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2}" />
当Amount值更改时,在属性集中,我正在检查Amount&gt; 100.如果是,那么我将值设置为100.
private decimal _Amount;
public decimal Amount
{
get { return _Amount; }
set {
if (value > 100)
_Amount = 100
else
_Amount = value;
NotifyPropertyChanged("Amount");
}
}
问题是这个新值永远不会出现在文本框中,无论我抛出INotifyPropertyChangedEvent多少次。
我尝试在TexBbox的LostFocus事件上抛出INotifyPropertyChanged事件,但这使得值重置为原始(未编辑)值。那是因为此事件在值到达属性设置器之前发生。
有人可以建议我让修改后的值正确显示吗?
答案 0 :(得分:0)
将UpdateSourceTrigger属性添加到文本框中。
<TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2, UpdateSourceTrigger=LostFocus}" />
答案 1 :(得分:0)
我终于开始工作了。我没有重置setter中的值,而是处理了对象的PropertyChangedEvent并重置了那里的值。
令人沮丧的是,这个解决方案在调试期间无法正常工作,但一旦发布就能正常工作。
感谢所有回复的人。