入力範囲を制限したい TextBox があります。
In this simple example Int32 from 0 to 300.
実際の範囲はより複雑であり、有効な値を受け取って表示する以外に UI を関与させたくありません。
333 を入力すると、300 が返され、300 が TextBox に表示されます。
ここに問題があります:
3001 の数字を追加すると、セットは 300 の値を割り当て
ます。get が呼び出され、300 が返さ
れます。
3001 を貼り付けると、正しく 300
が表示されます。失敗するのは、1 回のキー ストロークで 4 桁 (またはそれ以上) の数字を作成した場合のみです。
<TextBox Text="{Binding Path=LimitInt, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="60" Height="20"/>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private Int32 limitInt = 0;
public MainWindow()
{
InitializeComponent();
}
public Int32 LimitInt
{
get { return limitInt; }
set
{
if (limitInt == value) return;
limitInt = value;
if (limitInt < 0) limitInt = 0;
if (limitInt > 300) limitInt = 300;
NotifyPropertyChanged("LimitInt");
}
}
}