我正在尝试通过绑定来处理TextBox的MaxLength。我使用了一个叫做'MaxLengthConverter‘的帮助器类(参见这里的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,但如果用户键入'.‘(小数点),最大长度将是当前长度+ 2,所以他只能写23.45%,而不是23.456。问题是,只有当我离开TextBox (LostFocus)时,才会调用ValueConvert。如何在用户每次键入内容(KeyDown)时调用ValueConverter?
发布于 2013-05-24 18:27:18
将显式UpdateSourceTrigger定义为PropertyChanged,因为textbox的默认值为LostFocus
例如:
<TextBox>
<TextBox.Text>
<Binding Source="{StaticResource myDataSource}" Path="Name"
UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
</TextBox>https://stackoverflow.com/questions/16732782
复制相似问题