Это код для воспроизведения этой проблемы:
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, а пользовательский интерфейс покажет 100. Но тогда, если я введу больше чисел, пользовательский интерфейс не изменится, это будет 1001.
Я думаю, это как-то связано с установкой для свойства одинакового значения (100) дважды.Но я понятия не имею, как это исправить, под ним я хочу, чтобы пользовательский интерфейс всегда следовал за значением свойства.
Спасибо