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

时间:2015-10-10 00:03:49

标签: c# wpf

我创建了Coverter,它只作为TextBoxes的数字验证。 一切都很好,我在很少的地方使用它,但有一个地方它只是不起作用,我重新设置它,它开始工作,就像它是模式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)));
    }

我不知道是否重要,但有一次它在Window中使用,第二次在Page中,它在Page中不起作用。 页:

                <TextBox Name="PeselTextBox"
                Margin="2,5"
                Width="70"
                VerticalAlignment="Center"
                Text="{Binding ElementName=PeselTextBox,
                               Path=Text,
                               Mode=OneWay,
                               UpdateSourceTrigger=PropertyChanged,
                               Converter={StaticResource NumberValidationConverter}}"/>

在Window中它是一样的。 试图寻找解决方案,但我只是不明白这个错误。

1 个答案:

答案 0 :(得分:0)

首先,不要使用转换器进行验证。这不是他们的目的或擅长。如果您需要验证,请查看Using IDataErrorInfo in M-V-VM

那就是说,你正在使用模式(function ($) { var pointers = []; $('#pointerTarget').on('pointerdown pointerover pointerenter', function (event) { var id = event.originalEvent.pointerId; if (!pointers[id]) { pointers[id] = $(`<div id="${id}"><p>pointerId: ${id}</p></div>`).appendTo('body'); } }); $('#pointerTarget').on('pointerup pointerout pointerleave', function (event) { var id = event.originalEvent.pointerId; if (pointers[id]) { pointers[id].remove(); pointers.splice(id, 1); } }); })(jQuery); 。这意味着绑定所做的唯一事情就是反映视图模型中的更改(通过OneWay),不应该需要进行验证!如果要在将更改应用于视图模型之前进行转换,请使用PropertyChanged方法和模式ConvertBackTwoWay