WPF TextBox настройка текста с использованием триггера во время проверки - PullRequest
0 голосов
/ 04 октября 2010

У меня есть требование, при котором я должен вернуть значения TextBox к старому значению, когда пользователь вводит неправильный ввод. Я использую MVVM Framework, поэтому я не хочу писать какой-либо код позади.

Текст и тег TextBox связаны с переменной ViewModel. Таким образом, мое поле Tag TextBox всегда будет иметь старое значение. Я хочу использовать значение поля Tag для возврата моего значения Text.

  <Style TargetType="{x:Type TextBox}">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel LastChildFill="True">
                        <TextBlock DockPanel.Dock="Right" 
                    Foreground="Orange"
                    FontSize="12pt">

                </TextBlock>
                        <Border BorderBrush="Red" BorderThickness="1">
                            <AdornedElementPlaceholder />
                        </Border>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true" >
                <Setter Property="ToolTip" 
                        Value="{Binding Path=Tag,RelativeSource={RelativeSource Self}}">
                </Setter>
                <Setter Property="Text"
                            Value="{Binding Path=Tag,RelativeSource={RelativeSource Self}}">
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>


  <TextBox Width="68" Tag="{Binding SampleText}" Height="23" HorizontalAlignment="Left" Margin="39,37,0,0" VerticalAlignment="Top" >
        <TextBox.Text>
            <Binding Path="SampleText"  NotifyOnValidationError="True" ValidatesOnDataErrors="True" ValidatesOnExceptions="True">
                <Binding.ValidationRules>
                    <val:SampleTextValidator></val:SampleTextValidator>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>        
 </TextBox>


Теперь При возникновении ошибки TextBox выделяется красным. Я написал триггер, чтобы вернуть значение обратно к исходному значению (значение сохраняется в поле Tag). Тт не работает. Но часть всплывающей подсказки работает. Я запутался полностью. Пожалуйста, помогите, где я делаю неправильно !!! Поправьте меня с примером кода, если это возможно !!!!

1 Ответ

0 голосов
/ 05 октября 2010

Мое первое предположение состоит в том, что когда вы сделали ввод текста недействительным (например, удалите все значения), вы заставите тег связываться с тем же значением, следовательно, он будет отражать пустую строку.вам нужно отдельное свойство для исходного значения, к которому привязан ваш тег.

private string _oldValue;
public string OldValue
{
    get {...}
    set {... NotifyPropertyChanged()...}
}

private string _sampleText;
public string SampleText
{
    get { return _sampleText; }
    set {
            OldValue = _sampleText;
            _sampleText = value;
            NotifyPropertyChanged(...);
        }
}

<TextBox Width="68" Tag="{Binding OldValue}" ... >

Не забудьте реализовать INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...