转换器不希望只在一种情况下工作
本文关键字:一种 情况下 工作 希望 转换器 | 更新日期: 2023-09-27 18:17:04
我创建了Coverter,它可以作为文本框的数字验证。一切都很好,我在几个地方使用它,但有一个地方它就是不工作,我调试了它,它在开始工作,就像它是模式OneTime。
转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = value.ToString();
return (string.IsNullOrEmpty(val) ? "" : ( (val.Substring(val.Length - 1).Equals(",") && val.Count(x => x == ',') < 2) || char.IsDigit(System.Convert.ToChar(val.Substring(val.Length - 1))) ? val : val.Substring(0,val.Length-1)));
}
我不知道是否重要,但有一次它在窗口中使用,第二次在页面中使用,它在页面中不起作用。页面:
<TextBox Name="PeselTextBox"
Margin="2,5"
Width="70"
VerticalAlignment="Center"
Text="{Binding ElementName=PeselTextBox,
Path=Text,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource NumberValidationConverter}}"/>
在Window中也是一样。
首先,不要使用转换器进行验证。这不是他们想做的,也不是他们擅长的。如果需要验证,请查看Using IDataErrorInfo in M-V-VM
也就是说,您正在使用模式OneWay
。这意味着绑定所做的唯一事情就是反映视图模型中的更改(通过PropertyChanged
),无论如何不应该需要验证!如果您想在对视图模型应用更改之前进行转换,请使用ConvertBack
方法和模式TwoWay
或OneWayToSource
。