J'ai une validation accrochée à un modèle lié au conteneur code> de texte code>. Lorsque la fenêtre est d'abord ouverte, les erreurs de validation apparaissent comme le modèle est vide, je ne veux pas voir des erreurs de validation tant que de la fenêtre de la fenêtre ou du texte dans la zone de texte code> a changé ou sur la mise au point perdue.
Voici la zone de texte code>: p> Comment cela peut-il être atteint? p> p>
4 Réponses :
Ce que je fais, je n'en ai pas si c'est la bonne façon (je serais heureux d'apprendre, c'est une chance), mais dans l'initialisateur de l'entité ou le modèle, je gère tous les validateurs. P>
Si vous mettez en œuvre IDATAERRORINFO, je l'ai atteint en vérifiant les valeurs nulles dans la mise en œuvre de la logique de validation. Lors de la création d'une nouvelle fenêtre, la vérification de NULL empêchera votre logique de validation de la cuisson. Par exemple: De plus, si vous souhaitez déclencher la validation sur textbox.lostfocus, modifiez votre liaison à LostFocus, comme suit: p> <TextBox Text="{Binding
Path=Firstname,
UpdateSourceTrigger=LostFocus,
ValidatesOnDataErrors=True}"
Width="124"
Height="24"/>
Il pourrait être valable que certains des champs soient nuls, ce qui se passe dans ce cas?
Si NULL est une entrée valide, la validation ne retournera pas une erreur si vous le dites de ne pas. Tout dépend de la manière dont vous appliquez votre logique commerciale. Par exemple, si le champ peut être nul ou vide, permettez simplement à ces exceptions à effectuer dans votre logique. Pouvez-vous nous donner un exemple de ce que vous voulez vérifier sur un domaine particulier?
Cela dépend vraiment de votre mise en œuvre d'IDATAERRORINFO. Si vous le basez autour d'un dictionnaire de messages d'erreur, vous pouvez contrôler lorsque la validation est exécutée qui ajoute à cette liste. Vous voudrez normalement le faire à partir de vos constructeurs de propriétés (comme chaque fois que vous appelez de biensChanger), appelez ici CheckValidationState: Vous pouvez également inclure une méthode qui valide toutes vos propriétés (comme pendant Une sauvegarde): p> mise à jour: p> Je vous recommanderais de mettre le code ci-dessus dans une classe de vue de la base afin que vous puissiez la réutiliser. Vous pouvez ensuite créer une classe dérivée comme celle-ci: p> public class SampleViewModel : ViewModelBase
{
private string _firstName;
public SampleViewModel()
{
Save = new DelegateCommand<object>(SaveExecuted);
}
public DelegateCommand<object> Save { get; private set; }
public string FirstName
{
get { return _firstName; }
set
{
if (_firstName == value)
return;
CheckValidationState("FirstName", value);
_firstName = value;
NotifyPropertyChanged("FirstName");
}
}
public void SaveExecuted(object obj)
{
bool isValid = Validate();
MessageBox.Show(isValid ? "Saved" : "Validation Error. Save canceled"); // TODO: do something appropriate to your app here
}
protected override bool CheckValidationState<T>(string propertyName, T proposedValue)
{
// your validation logic here
if (propertyName == "FirstName")
{
if (String.IsNullOrEmpty(proposedValue as String))
{
SetError(propertyName, "First Name is required.");
return false;
}
else if (proposedValue.Equals("John"))
{
SetError(propertyName, "\"John\" is not an allowed name.");
return false;
}
else
{
SetError(propertyName, String.Empty); // clear the error
return true;
}
}
return true;
}
}
Merci pour la réponse John, pourriez-vous développer votre réponse un peu s'il vous plaît. J'ai essayé de mettre en œuvre ce que vous avez discuté et obtenu un peu perdu. Merci...
Burt - j'ai mis à jour pour ajouter plus de code pour montrer comment une classe pourrait implémenter cela que j'espère remplir dans certains des trous pour vous. Est-ce que cela vous aide?
Merci John apprécie vraiment cela, je suis allé à vous voter, mais vous avez réussi à supprimer un vote, cela ne m'a pas laissé ajouter.
@Johnbowen pourquoi notifypropertychanged ("erreurs"); Notifypropertychanged ("erreur"); NotifypropertyChanged ("Item []"); tiré à seterror?
Dans votre fichier App.xaml, vous devez utiliser un style de texte personnalisé pour la validation de la zone de texte sans composant tiers.
p>