C# WPF StringFormat仅允许正数
我只想允许用户在我的文本框中输入正数 如果我输入C# WPF StringFormat仅允许正数,c#,wpf,validation,mvvm,string-formatting,C#,Wpf,Validation,Mvvm,String Formatting,我只想允许用户在我的文本框中输入正数 如果我输入-10并使用 <TextBox Text="{Binding Width, StringFormat={}{0:0.00;0.00}}" /> 然后它总是显示正数,但后面的数据仍然是负数 如何正确执行?由于验证规则强制值为正值,我建议也检查VM属性中的值以强制/转换它: public string Width { get { return _width; } set { int re
-10
并使用
<TextBox Text="{Binding Width, StringFormat={}{0:0.00;0.00}}" />
然后它总是显示正数,但后面的数据仍然是负数
如何正确执行?由于验证规则强制值为正值,我建议也检查VM属性中的值以强制/转换它:
public string Width
{
get { return _width; }
set
{
int result;
int.TryParse(width, out result);
_width = (result < 0 ? result *-1 : result).ToString();
PropertyChanged("Width");
}
}
公共字符串宽度
{
获取{return\u width;}
设置
{
int结果;
int.TryParse(宽度,输出结果);
_宽度=(结果<0?结果*-1:结果).ToString();
财产变更(“宽度”);
}
}
有很多方法可以解决这个问题,比如OmegaMan's。但我的解决方案是根本不使用文本框。不幸的是,WPF从未拥有现成的spinbox/updown控件,但它确实有一个。那么,为什么要把时间浪费在分析和处理所有讨厌的案例上呢?让控制装置来完成繁重的工作
<extToolkit:IntegerUpDown Value="{Binding Width}" Minimum="0"/>
完成您不会使用
StringFormat
完成。您是否处理Width
属性的setter?如果没有,你需要在TextBox
上处理previewtextemput
事件,我可以通过交互来完成。行为
,但我更喜欢用普通的StringFormat
StringFormat
来处理。最可靠的解决方案是在属性的setter中包含Math.Abs(value)
,然后引发PropertyChanged
事件。但是,如果您不能做到这一点,请使用您的交互行为解决方案