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.