La mise en œuvre de textbox événement lostfocus dans MVVM
Je veux accomplir une tâche simple.
Nécessité de mettre en œuvre zone de texte lostfocus, Que l'utilisateur met les données, dès qu'un champ est rempli et il arrive à la suivante, il faut tirer une fonction de validation sur le champ précédent.
Aussi, je suis en utilisant le pattern MVVM.
J'ai donc cette classe
public class data : INotifyPropertyChanged
{
public string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
OnPropertyChanged("Name");
}
}
public string firstname;
public string FirstName
{
get
{
return firstname;
}
set
{
firstname = value;
OnPropertyChanged("FirstName");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
//Raise the PropertyChanged event
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Dans le Viewmodel j'ai eu ce
data1 = new data() { name = "Eddie Vedder", firstname = "Eddie" }; //this line in initialization
public data _data1;
public data data1
{
get { return _data1; }
set
{
_data1 = value;
ValidateThis();
NotifyPropertyChanged(new PropertyChangedEventArgs("data1"));
}
}
En Xaml:
<StackPanel Orientation="Horizontal" >
<Label Width="90" Content="Name" Height="28" HorizontalAlignment="Left" Name="lblName" VerticalAlignment="Top" />
<TextBox Text="{Binding Path=data1.name, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" MaxLength="40" TabIndex="2" Height="25" Margin="0,3,0,0" HorizontalAlignment="Left" Name="txtName" VerticalAlignment="Top" Width="200" />
</StackPanel>
<StackPanel Orientation="Horizontal" >
<Label Width="90" Content="First Name" Height="28" HorizontalAlignment="Left" Name="lblFirstName" VerticalAlignment="Top" />
<TextBox Text="{Binding Path=data1.firstname, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" MaxLength="40" TabIndex="3" Name="txtFirstName" Height="25" Margin="0,3,0,0" VerticalAlignment="Top" Width="200" >
</TextBox>
</StackPanel>
Ma liaison est-il des chaussures le nom par défaut Eddie Vedder quand je l'exécuter.
Quand je debug, il ne veut pas entrer dans la classe des données.
- Aussi est-il une raison particulière pour laquelle vous ne voulez pas faire de la "régulière" façon c'est à dire à l'aide d'attributs de Système.ComponentModel.DataAnnotations dans votre modèle de vue?
- pourquoi pas: ValidatesOnDataErrors=true, UpdateSourceTrigger=LostFocus dans votre xaml de liaison et IDataErrorInfo dans votre VM?
- désolé pour la réponse tardive, les gars, venez de télécharger ce que j'ai fait.
- Hey Mark, je veux montrer les erreurs personnalisées dans une autre grille.
Vous devez vous connecter pour publier un commentaire.
Que vous utilisez le pattern MVVM, je suppose que vous avez une liaison de visualiser le modèle de la propriété et il ressemble à ceci:
Xaml:
c#:
Si vous définissez UpdateSourceTrigger à LostFocus, propriété a changé de sera déclenché lorsque vous avez perdu le focus.
Il y a un très bel article pour ce: WPF MVVM commandes
D'abord créer une classe: la
DelegateCommand.cs
Ajouter le délégué dans votre ViewModel:
Et l'initialiser dans le constructeur du ViewModel:
Vue:
vous devez ajouter l'espace de noms suivant
Et le contrôle
Et ce un peu fait le tour