2009-11-14 7 views
2

Je suis désolé, je ne savais pas comment le titre ma question mieux, vous nommez si vous avez un bon 1.Bind Button.IsEnabled à la validation personnalisée avec XAML?

J'ai une entité Contact. cette personne a des propriétés de navigation: Address, Phones (une collection de Phone).

toutes mettent en œuvre une interface personnalisée qui expose une propriété IsValid.

Dans la forme edito de contact J'ai un bouton OK, je veux sa IsEnabled propriété est vrai que si:

Contact.IsValid 
Contact.Address.IsValid 
Array.TrueForAll(Person.Phones.Cast(Of Phone).ToArray, Function(p) p.IsValid) 

Je préfère ne pas utiliser un convertisseur, mais de le faire Xamly que, de toute façon, Cela ne me dérange pas d'utiliser le code local (ie référence à une méthode dans la page en cours qui renvoie une valeur booléenne comme System.Web.UI.WebControls.CustomValidator ou quelque chose comme ça), mais je ne veux vraiment pas de convertisseur sauf si c'est la seule option.

Répondre

0

Thru this j'ai pu résoudre ma question.

I lié à la propriété IsEnabled à une dépendance à la propriété I placé dans le code sous-jacent qui retourne si les articles ne sont valables que j'ai appelé IsValid:

Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded 
    btnOK.DataContext = Me 
End Sub 

Private m_IsValid As Boolean 
Public Property IsValid() As Boolean 
    Get 
     Return GetValue(IsValidProperty) 
    End Get 
    Private Set(ByVal value As Boolean) 
     SetValue(IsValidPropertyKey, value) 
    End Set 
End Property 

Private Shared ReadOnly IsValidPropertyKey As DependencyPropertyKey = _ 
         DependencyProperty.RegisterReadOnly("IsValid", _ 
         GetType(Boolean), GetType(PersonEditor), _ 
         New FrameworkPropertyMetadata(False)) 

Public Shared ReadOnly IsValidProperty As DependencyProperty = _ 
         IsValidPropertyKey.DependencyProperty 

I régler la propriété IsValid aux gestionnaires d'événements OnPropertyChanged de TOUS les articles à valider.

Dans le Xaml je mis le bouton comme ceci:

<Button Name="btnOk" IsEnabled="{Binding IsValid}"/> 
+1

marque votre question une réponse –

+0

vous l'avez patron. – Shimmy