2017-09-20 5 views
0

Avec "Template10.Validation", je veux changer de style.C# UWP Template10.Validation Changement de style

D'abord j'ai fait ce style pour "valider: ControlWrapper".

<Style TargetType="validate:ControlWrapper"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="validate:ControlWrapper"> 
       <StackPanel> 

        <ContentPresenter Content="{TemplateBinding Content}" /> 

        <ItemsControl ItemsSource="{Binding Errors, Source={TemplateBinding Properties[PropertyName]}}" > 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Foreground="Red" Text="{Binding}" Visibility="{Binding IsValid}"/> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 


       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

et Voici le résultat.

enter image description here

Quelque chose est étrange. parce que je veux afficher le message d'avertissement de validation pour le prénom UNIQUEMENT. mais il affiche tous les avertissements. de l'adresse, du code postal.

Mon principal quesiton Comment accéder à "ValidatableModelBase.Property [" PROPERTYNAME "]. Erreurs" en XAML. car [] la couverture n'est pas possible à utiliser dans la liaison XAML. Comment accéder?

+0

N'utilisez pas de guillemets, vous pouvez utiliser des crochets en XAML, voir ma [validation avec l'échantillon Prism] (https://github.com/bartlannoeye-com/2017-01-UWPValidation/blob/master/Src/Validation/Views/MainPage.xaml#L24). – Bart

Répondre

1

avec beaucoup de mon temps, je trouve enfin une solution pour ma question ...

est d'abord ma classe de modèle.

public class SettingEmail 
    : Template10.Validation.ValidatableModelBase 
{public string EmailReceivers { get { return Read<string>(); } set { Write(value); } }} 

Suivant est la propriété à lier. (dans ma classe ViewModel)

public SettingEmail SettingEmailModel{ get { return se; } set { this.Set(ref se, value); } } 

Ensuite est le code XAML.

<validate:ControlWrapper DataContext="{Binding SettingEmailModel}"          
        PropertyName="EmailReceivers"              
        Style="{StaticResource validationNotify}">          
    <TextBox Text="{Binding EmailReceivers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   
      MinHeight="400" Style="{StaticResource SettingStyle_MultilineTextBox}"/>     
</validate:ControlWrapper>  

et Last est le style dans le fichier de ressources.

<Style x:Key="validationNotify" TargetType="validate:ControlWrapper"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="validate:ControlWrapper"> 
       <StackPanel > 

        <ContentPresenter Content="{TemplateBinding Content}"/> 


        <ItemsControl DataContext="{TemplateBinding Property}" 
            ItemsSource="{Binding Errors, Source={TemplateBinding Property}}" 
            Style="{StaticResource validationNotifyMessage}" 
            > 
         <ItemsControl.ItemTemplate > 
          <DataTemplate> 
           <StackPanel> 
            <TextBlock Foreground="Red" Text="{Binding}"/> 
           </StackPanel> 

          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 

       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>                   

J'espère que cela aidera quelqu'un. et je suis désolé avec les descriptions de ma mauvaise question ... Je vais essayer d'améliorer prochain ...

+0

Vous pourriez utiliser ce qui suit pour simplifier le code où dans votre réponse '' –