Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
silverlight-更改属性上的值已更改_Silverlight_Binding_Textbox_Inotifypropertychanged - Fatal编程技术网

silverlight-更改属性上的值已更改

silverlight-更改属性上的值已更改,silverlight,binding,textbox,inotifypropertychanged,Silverlight,Binding,Textbox,Inotifypropertychanged,我有一个绑定到名为Amount的十进制属性的文本框,还有一条业务规则,该规则规定Amount值不能大于100。 这是使用正确的MVVM和INotifyPropertyChanged事件设置的 <TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2}" /> 问题是,无论我抛出INotifyPropertyChangedEvent多少次,这个新值都不会显示在文本框中 我尝试在TexBbox的LostFocus事

我有一个绑定到名为Amount的十进制属性的文本框,还有一条业务规则,该规则规定Amount值不能大于100。 这是使用正确的MVVM和INotifyPropertyChanged事件设置的

    <TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2}" />
问题是,无论我抛出INotifyPropertyChangedEvent多少次,这个新值都不会显示在文本框中

我尝试在TexBbox的LostFocus事件上抛出INotifyPropertyChanged事件,但这使该值重置为originalunedited值。这是因为此事件发生在值到达属性设置器之前


有人能给我建议一种方法,让修改后的值正确显示吗?

将UpdateSourceTrigger属性添加到文本框中

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

我终于成功了。我没有在setter中重置值,而是处理对象的PropertyChangedEvent并在那里重置值

令人沮丧的是,这个解决方案在调试期间不起作用,但一旦发布就可以正常工作


感谢所有响应者。

当我这样做时,用户会遇到一些奇怪的光标重新定位。例如,如果他们键入“1234”,则结果为“3412”,因为在他们键入时光标会重新定位到文本的开头。一旦用户键入3,则会在setter中命中if语句。尝试使用LostFocus作为属性的值,而不是PropertyChanged。我不太明白你的意思。我已尝试在lostFocus事件期间引发NotifyPropertyChange,但这会阻止用户更改值。我使用更新的UpdateSourceTrigger值编辑了答案。在字段中键入值1234并且字段失去焦点后,将调用setter。在Silverlight中,失去焦点不是有效选项。无论如何,谢谢你,我确实设法让它工作了。它在发布时的行为与在调试中运行时的行为不同。
<TextBox Text="{Binding Amount, Mode=TwoWay, StringFormat=N2, UpdateSourceTrigger=LostFocus}" />