J'utilise System.Windows.ValidationRule.System.Windows.Controls.ValidationRule ne prend en charge que les types de valeur pour les propriétés
public class XXXValidationRule : ValidationRule
{
public object FooObject { get; set;}
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
Bar barObject = this.FooObject.BarObject;
}
}
Mon XAML s'affiche comme ceci.
<ui:Windows.Resources>
<ResourceDictionary>
<viewModel:XXXValidationRule x:key="xxxValidationRule"/>
</ResourceDictionary>
</ui:Windows.Resources>
...
<TextBox.Text>
<Binding Path="..." UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<viewModel:XXXValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Jusqu'ici tout va bien. Maintenant, dans le code derrière mon dialogue XAML, j'initialise la ValidationRule comme suit.
public partial class XamlDialog : System.Windows.Window
{
private System.Windows.Controls.ValidationRule xxxValidationRule;
public XamlDialog()
{
InitializeComponent();
InitializeResources();
}
public void InitializeResources()
{
this.xxxValidationRule = (ValidationRule)this.Resources["xxxValidationRule"];
this.xxxValidationRule.FooObject= new FooObject();
}
...
}
Le point est, quand XXXValidationRule.Validate est déclenché la propriété FooObject est toujours nulle.
Si je travaille avec le type de valeur int pour le Property FooObject, même effet. Si je travaille toujours avec le type de valeur int et que vous définissez explicitement la propriété dans XAML comme suit, je reçois la valeur correcte (99) dans la règle de validation. Tout d'abord, est-ce que ValidationRule ne prend en charge que les types de valeur ou existe-t-il un moyen de travailler avec les types de référence décrits plus haut? Deuxièmement, devons-nous définir ces propriétés explicitement en XAML ou est-il possible de le définir dans Code Behind?
Merci pour l'aide :-)
votre liaison 'Binding.ValidationRules' créera une nouvelle instance de' XXXValidationRule' et n'utilisera pas l'instance de la ressource où vous définissez 'FooObject' – dkozl