1

我正在尝试通过绑定处理 TextBox 的 MaxLength。我正在使用一个名为“MaxLengthConverter”的 Helper 类(请参见此处http://mariabrinas.com/?p=89)。TextBox 目前看起来像这样:

<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。最大值。TextBox 的长度将为 7,但如果用户键入 '.' (小数点),maxlength 将是当前长度 + 2,所以他只能写 23.45 而不能写 23.456。问题是只有在我离开 TextBox (LostFocus) 时才会调用 ValueConvert。每次用户在 (KeyDown) 中输入内容时,如何调用 ValueConverter ?

4

1 回答 1

0

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

例如:

  <TextBox>
  <TextBox.Text>
    <Binding Source="{StaticResource myDataSource}" Path="Name"
             UpdateSourceTrigger="PropertyChanged"/>
  </TextBox.Text>
</TextBox>
于 2013-05-24T10:27:17.847 回答