通过结合处理的MaxLength(Handling MaxLength via Binding)

2019-10-18 04:46发布

我试图通过结合处理一个TextBox的MaxLength。 我使用的是被称为“MaxLengthConverter”的辅助类(见这里http://mariabrinas.com/?p=89 )。 目前该文本框看起来是这样的:

<TextBox MaxLength="{Binding TestValue, Mode=TwoWay, Converter={StaticResource MaxLengthConverter}, ConverterParameter='7'}" Text="{Binding TestValue, Mode=TwoWay}" InputScope="Number" />

而MaxLengthValueConvert看起来是这样的:

public class MaxLengthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        if (value.ToString().Contains('.'))
        {
            string[] len = value.ToString().Split('.');
            parameter = len[0].Length + 2;
        }


    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return parameter;
    }
}

的参数是值的长度。 在这个例子中是7最大。 文本框的长度将是7,但是,如果用户键入一个“” (小数点)时,最大长度将是当前长度+ 2,所以他只能写23.45和不23.456。 问题是,当我离开文本框(引发LostFocus)的ValueConvert才会被调用。 我怎样才能调用ValueConverter每次用户类型的东西(的KeyDown)?

Answer 1:

定义一个明确的UpdateSourceTrigger作为PropertyChanged因为文本框默认是引发LostFocus

例如:

  <TextBox>
  <TextBox.Text>
    <Binding Source="{StaticResource myDataSource}" Path="Name"
             UpdateSourceTrigger="PropertyChanged"/>
  </TextBox.Text>
</TextBox>


文章来源: Handling MaxLength via Binding