Как реализовать проверку привязки WPF в коде C # - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь обобщить пример, предоставленный Microsoft, иллюстрирующий, как реализовать проверку связывания [https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-binding-validation#see-also], переформулировав все это в C #.

(1) Я пытаюсь преобразовать следующую привязку XAML в C #:

<TextBox Name="textBox1" Width="50" FontSize="15"
         Validation.ErrorTemplate="{StaticResource validationTemplate}"
         Style="{StaticResource textBoxInError}"
         Grid.Row="1" Grid.Column="1" Margin="2">
  <TextBox.Text>
    <Binding Path="Age" Source="{StaticResource ods}"
             UpdateSourceTrigger="PropertyChanged" >
      <Binding.ValidationRules>
        <c:AgeRangeRule Min="21" Max="130"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

(2) и следующий XAML, который создает красный восклицательный знак для уведомления пользователя об ошибке проверки C #:

    <ControlTemplate x:Key="validationTemplate">
      <DockPanel>
        <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
        <AdornedElementPlaceholder/>
      </DockPanel>
    </ControlTemplate>

(3) также создается XAML, который создает всплывающую подсказку для C #, которая показывает сообщение об ошибке:

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

Моя цель - сделать его многократно используемым во многих местах, определив класс, который может создавать и определять как текстовое поле, так и привязку в моей программе для соединения текстовых полей со свойствами целого или двойного типа. Хотя аналогичный вопрос задавался ранее [ WPF C #, как создать ЭТУ привязку в коде? , в этом случае код XAML для определения привязки и вспомогательных утилит / методов довольно сложен.

Любой комментарий, предложение или помощь будут оценены.

i.konuk

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