我希望在我的文本框中只允许用户输入正数。
如果我输入 -10
并使用
<TextBox Text="{Binding Width, StringFormat={}{0:0.00;0.00}}" />
如果始终显示正数,但数据仍然是负数,该怎么办?
如何正确处理?
我希望在我的文本框中只允许用户输入正数。
如果我输入 -10
并使用
<TextBox Text="{Binding Width, StringFormat={}{0:0.00;0.00}}" />
如果始终显示正数,但数据仍然是负数,该怎么办?
如何正确处理?
由于验证规则强制值为正数,因此我建议在VM属性中也检查该值以强制/转换它:
private string _width;
public string Width
{
get { return _width; }
set
{
int result;
int.TryParse(value, out result);
_width = (result < 0 ? result *-1 : result).ToString();
PropertyChanged("Width");
}
}
value
的变量,该变量包含属性的新值。您的setter从哪里获取新值,width
(在int.TryParse(...)
中)来自哪里?显然,width
包含新值,但是新值是如何进入其中的? - Binarus有许多方法可以处理这个问题,例如OmegaMan的解决方案。但是我的解决方案是根本不使用文本框。遗憾的是,WPF从未拥有过一个出色的旋转框/上下控件,但是扩展的WPFToolkit确实有一个。那么为什么要浪费时间来解析和处理所有糟糕的情况呢?让控件来完成繁重的工作。
<extToolkit:IntegerUpDown Value="{Binding Width}" Minimum="0"/>
完成
StringFormat
来完成它。你处理了Width
属性的 setter 吗?如果没有,你需要处理TextBox
上的PreviewTextInput
事件。 - dkozlInteraction.Behaviors
来完成,但我更喜欢使用普通的StringFormat
。 - juergen dStringFormat
不是这样使用的。最可靠的解决方案应该在属性的 setter 中包含Math.Abs(value)
,然后触发PropertyChanged
事件。但如果你不能这样做,就使用Interaction.Behaviors
解决方案。 - dkozl