silverlight - 改变财产价值的变化

时间:2014-10-21 20:04:51

标签: silverlight binding textbox inotifypropertychanged

我有一个绑定到名为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事件,但这使得值重置为原始(未编辑)值。那是因为此事件在值到达属性设置器之前发生。

有人可以建议我让修改后的值正确显示吗?

2 个答案:

答案 0 :(得分:0)

将UpdateSourceTrigger属性添加到文本框中。

<TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2, UpdateSourceTrigger=LostFocus}" />

答案 1 :(得分:0)

我终于开始工作了。我没有重置setter中的值,而是处理了对象的PropertyChangedEvent并重置了那里的值。

令人沮丧的是,这个解决方案在调试期间无法正常工作,但一旦发布就能正常工作。

感谢所有回复的人。