【发布时间】:2011-11-04 05:11:40
【问题描述】:
这是重现此问题的代码:
xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Text="{Binding Num, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></TextBox>
</Grid>
C#:
using System.ComponentModel;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Entity();
}
}
public class Entity : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private double num;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public double Num
{
get { return num; }
set
{
num = value;
if (value > 100)
{
num = 100;
}
OnPropertyChanged("Num");
}
}
}
}
现在,如果我运行它,输入 1,就可以了。然后再输入一个1,变成11,还是可以的。 然后再输入一个 1,即 111,现在验证将生效并将值更改为 100,UI 将显示 100。 但是如果我输入更多的数字,用户界面不会改变,它会是 1001。
我猜这与将属性设置为相同的值(100)两次有关。 但我不知道如何修复它,修复它的意思是让 UI 始终遵循属性值。
谢谢
【问题讨论】:
-
您正在检查值是否 > 100。1001 确实大于 100,因此它正在接受该值,但将私有字段设置为 100。您期望会发生什么?
-
我不认为你上面的代码准确地代表了你的真实代码;如果它是
> 100,上面的设置器only 设置值,并将其设置为100。如果它小于,它永远不会真正设置值。 -
@Chris Shain :我希望 UI 更改为 100,因为即使您输入 1001,属性值也是 100。
-
@Adam Robinson:我刚刚更新了帖子。
标签: c# wpf xaml inotifypropertychanged