在 WPF + MVVM +Binding + UserInput 中的 TextBox “预期格式为 DD/MM/YYYY”
Posted
技术标签:
【中文标题】在 WPF + MVVM +Binding + UserInput 中的 TextBox “预期格式为 DD/MM/YYYY”【英文标题】:In TextBox "format expected is DD/MM/YYYY" in WPF + MVVM +Binding + UserInput 【发布时间】:2019-02-16 16:11:08 【问题描述】:我正在尝试在文本框中以指定格式输入有效日期。任何人都可以帮我验证在文本框中输入的日期是否有效,并且它的格式为 DD/MM/YYYY?
如果它不是用户输入的有效日期,则在按 Tab 后(从文本框中单击外部)它应该说:日期错误输入。
查看模型:
私人日期时间? _txtDateDeRec;
public DateTime? TxtDateDeRec
get
return this._txtDateDeRec;
set
this._txtDateDeRec = value;
OnPropertyChanged("TxtDateDeRec");
XAML 代码是:
TextBox x:Name="txtDateDeRec" HorizontalAlignment="Left" Height="23" Margin="555,65,0,0" TextWrapping="Wrap" Text="Binding TxtDateDeRec" VerticalAlignment="Top"宽度=“163”
【问题讨论】:
在字段上创建一个事件并尝试在 c# 中使用 Datetime 进行解析。将 DateTime.Parse 或 DateTime.TryParse 与您的 DD/MM/YYYY 格式一起使用。在这里查看dotnetperls.com/datetime-parse 和dotnetperls.com/datetime-tryparse 非常感谢,它现在可以工作了......我按照你的建议使用了。 textBox1.Leave += new EventHandler((sender2, ee) =>
var textBox = (Control)sender2;
var date = new DateTime();
if(DateTime.TryParse(textBox.Text,out date))
textBox.Text= String.Format("0:dd/MM/yyyy", date);
else
textBox.Text = "date wrongly entered.";
);
更新 1:仅格式 DD/MM/YYY
textBox1.Leave += new EventHandler((sender2, ee) =>
var textBox = (Control)sender2;
var date = new DateTime();
var testResult = DateTime.TryParse(textBox.Text, out date);
var dateToString = String.Format("0:dd/MM/yyyy", date);
if(testResult==true && textBox.Text.Trim() == dateToString)//Format is the same
textBox.Text =dateToString ;
else
textBox.Text = "date wrongly entered.";
);
【讨论】:
我有 XAML。我不能这样使用。 在 xaml 或 mvvm 中我不能这样使用。【参考方案2】:要验证日期时间格式,可以在文本框的绑定中使用验证规则。
public class DateValidation : ValidationRule
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
ValidationResult result;
try
Regex regex = new Regex(@"^([0]?[0-9]|[12][0-9]|[3][01])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]4|[0-9]2)$");
DateTime? date;
//Verify whether date entered in dd/mm/yyyy format.
bool isValid = regex.IsMatch(value.ToString());
//Verify whether entered date is Valid date.
isValid = isValid && DateTime.TryParseExact(value.ToString(), "dd/MM/yyyy", new CultureInfo("en-GB"), DateTimeStyles.None, out date);
result = isValid ? new ValidationResult(true,null) : new ValidationResult(false,"Date wrongly entered");
catch(Exception )
result = new ValidationResult(false,"Date wrongly entered");
return result;
为文本框添加如下验证规则
<TextBox x:Name="txtDateDeRec" HorizontalAlignment="Left" Height="23" Margin="555,65,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="163">
<TextBox.Text>
<Binding Path="TxtDateDeRec" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:DateValidation/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
【讨论】:
以上是关于在 WPF + MVVM +Binding + UserInput 中的 TextBox “预期格式为 DD/MM/YYYY”的主要内容,如果未能解决你的问题,请参考以下文章
WPF MVVM,Prism,Command Binding
WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参