转换器不希望只在一种情况下工作

本文关键字:一种 情况下 工作 希望 转换器 | 更新日期: 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方法和模式TwoWayOneWayToSource

相关文章: