【发布时间】:2013-02-21 17:57:42
【问题描述】:
有一个我想限制输入范围的文本框。
在这个简单的例子中,Int32 从 0 到 300。
在现实生活中,范围更复杂,除了接收并显示有效值之外,我不想让 UI 参与其中。
如果我输入 333,它会返回 300,而 300 在 TextBox 中。
问题来了:
然后,如果我为 3001 添加一个数字,则该集合分配的值为 300。
调用 get 并返回 300。
但 3001 仍在 TextBox 中。
如果我粘贴 3001,那么它会正确显示 300。
只有当单次击键达到 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");
}
}
}
【问题讨论】:
-
您需要实现验证。看this blog post。
-
@MichaelPerrenoud 假装我不想使用验证。为什么 get 返回的值不是 UI 中的那个值? 301 显示 300。-1 显示 0。但 3001 显示 3001。
-
我没有遇到同样的问题...我复制/粘贴了您的代码,当我按
1获取3001时,它给了我300。 -
@Bob。我尝试了另一个盒子和同样的问题。 .NET 4.0 Visual Studio 2010。
-
嗯...你是对的,我认为它是一个 .NET 的东西。我使用了 .NET 4.5,它可以工作,但在 .NET 4.0 中却不行。
标签: c# .net wpf binding textbox