У меня проблема, мне нужно работать. Позиция каретки моего TextBox сбрасывается на первый символ, когда происходят определенные события. Вот XAML для моего TextBox, мое приложение использует MVVM:StringFormat, Validation и Caret Position
<TextBox x:Name="txtAmount" Text="{Binding CurrentClientObject.Amount, Mode=TwoWay, StringFormat='###,###,##0.00'}"></TextBox>
обязан моделировать свойства:
private System.Nullable<decimal> _Amount;
[Display(ResourceType = typeof(MatchModelResx), Name = "LabelAmount", Description = "ToolTipAmount")]
public System.Nullable<decimal> Amount
{
get
{
return _Amount;
}
set
{
_Amount = value;
NotifyChanged("Amount");
}
}
StringFormat вызывает проблему здесь, так как всякий раз, когда строка ввода I в TextBox запускает обновление свойства в модели, применяется StringFormat и перемещается курсор внутри TextBox.
Теперь это не представляет проблемы, так как модель обновляется на lostfocus (UpdateSourceTrigger = Default), но там это случай, когда TextBox в режиме ошибки. Если пользователь либо вводит значение, которое нарушает правило пользовательской проверки, либо находится в недопустимом формате (то есть: вводит 64.5x5 в поле, привязанное к десятичной системе), каждый отдельный ключ запускает обновление свойства в модели. И поскольку обновление модели может привести к применению StringFormat, это означает, что каретка будет перемещаться влево, пока пользователь пытается исправить недопустимое значение в TextBox. Это раздражающее поведение для наших клиентов, и нам действительно нужно найти путь вокруг него.
Я попытался использовать собственный конвертер для привязки вместо строкового формата, но это не устраняет проблему. И поскольку исключение иногда возникает до того, как код достигнет набора свойств, у меня нет способа справиться с этим до того, как карет перемещается.
Предлагает ли Silverlight 5 возможность обойти это?
Спасибо!