Comment puis-je avoir une boîte de dialogue pour modifier les propriétés d'une classe avec une liaison et avoir OK-Annuler dans la boîte de dialogue?
Ma première idée était ceci: p>
public partial class EditServerDialog : Window {
private NewsServer _newsServer;
public EditServerDialog(NewsServer newsServer) {
InitializeComponent();
this.DataContext = (_newsServer = newsServer).Clone();
}
private void ButtonClick(object sender, RoutedEventArgs e)
{
switch (((Button)e.OriginalSource).Content.ToString()) {
case "OK":
_newsServer = (NewsServer)this.DataContext;
this.Close();
break;
case "Cancel":
this.Close();
break;
}
}
}
3 Réponses :
L'instance originale de votre code> NewsSnerver code> n'est pas modifiée car vous ne l'avez pas réellement modifié. Une fois que votre constructeur est appelé, vous avez les trois code> code> Références: Une fois le bouton OK en cliquant sur les références suivies: P> NewsServer newsServer = ...;
EditServerDialog editServerDialog = new EditServerDialog(newsServer);
if (editServerDialog.ShowDialog() == true)
{
newsServer = editServerDialog.DataContext;
}
Comment devrais-je faire cela et pour toujours être en mesure d'annuler et / ou d'appliquer?
Une ancienne question mais je vais y répondre pour les futurs lecteurs ...
Vous devez définir updatedatefetrigger = "explicite" code> sur vos liaisons afin de ne pas mettre à jour la source réelle jusqu'à ce que l'utilisateur clique sur OK . Ensuite, sur votre gestionnaire de bouton OK, vous pouvez écrire: P> BindingExpression be = MyTextBox.GetBindingExpression(TextBox.TextProperty);
if (be!=null) be.UpdateTarget();
C'est une question ancienne, mais je l'ai récemment rencontrée et trouvée, il y a une meilleure façon de le gérer avec .NET 4.5.
Premier, marquez les mises à jour de vos liaisonsOrCetrigger comme explicite: P>
foreach (var be in BindingOperations.GetSourceUpdatingBindings(this))
{
be.UpdateSource();
}
Cela pourrait vous aider si vous montrez la configuration de la liaison.
Exemple de liaison: {Néannithéthentification de la liaison, UpdatesTourceRigger = LostFocus, Mode = Twoway}. La liaison est correcte parce que cela.DataContext contient les données correctes.