我创建了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中它是一样的。 试图寻找解决方案,但我只是不明白这个错误。
答案 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
方法和模式ConvertBack
或TwoWay
。