Boutons radio MVVM

Quelqu’un s’il vous plaît aider. J’ai un problème intéressant. J’essaie d’implémenter une application MVVM et je souhaite me connecter aux boutons radio à mon avis.

Voici ma vue:

 General Contact Address Phone  

Voici mon ViewModel:

  bool _NoteGeneral; public bool NoteGeneral { get { return _NoteGeneral; } set { _NoteGeneral = value; OnPropertyChanged("NoteGeneral"); } } bool _NoteContact; public bool NoteContact { get { return _NoteContact; } set { _NoteContact = value; OnPropertyChanged("NoteContact"); } } bool _NoteAddress; public bool NoteAddress { get { return _NoteAddress; } set { _NoteAddress = value; OnPropertyChanged("NoteAddress"); } } bool _NotePhone; public bool NotePhone { get { return _NotePhone; } set { _NotePhone = value; OnPropertyChanged("NotePhone"); } } 

Le problème est le suivant: lorsque je clique sur les différentes radiobuttons, le setter de propriété est appelé uniquement la première fois (lorsque je lance le débogage). Par exemple, lorsque je clique sur NoteGeneral, NoteContact, puis à nouveau sur NoteGeneral, seuls les deux premiers clics mettent à jour mon modèle de vue. Je pense que je pourrais avoir quelque chose de mal avec ma reliure, ou peut-être que je m’en approche complètement.

Quelqu’un peut-il aider?

Comment dois-je implémenter les sélections radiobutton dans mon modèle de vue?

.NET 4 et versions ultérieures

Ce problème avec la liaison RadioButton a été résolu par Microsoft lorsque .NET 4 a été publié. La liaison de RadioButtons fonctionne désormais comme prévu, sans les solutions de contournement énumérées ci-dessous.

    Regardez ici .

    Je n’ai pas implémenté la solution fournie, mais c’est logique. Le contrôle d’infrastructure sous-jacent vous brise les liaisons lorsqu’un clic est effectué. La solution consiste à remplacer la méthode qui le fait et à ne compter que sur les liaisons.

    Jaime Rodriguez , qui travaille chez Microsoft sur WPF, publie un Q & A intégral sur WPF, et le dernier numéro a un post sur RadioButtons et MVVM!

    La publication se trouve à l’ adresse http://blogs.msdn.com/jaimer/archive/2009/09/22/wpf-discussion-090922.aspx , et vous souhaitez consulter le dernier élément de cette publication. J’ai testé la solution et cela fonctionne à ma satisfaction.

    Cité pour plus de commodité:

    J’ai travaillé sur ce problème dans .NET 3.5 SP1. Voici comment mes données lient un groupe de boutons radio à une propriété enumée:

          

    Si vous définissez le nom de groupe de chaque bouton radio sur une valeur unique, les liaisons ne seront pas endommagées lorsque l’utilisateur cliquera sur un bouton radio. Ici, je me base sur la source de données pour implémenter INotifyPropertyChanged, qui indiquera aux autres boutons radio de se mettre à jour. Une approche similaire devrait fonctionner pour les boutons radio dans un ItemsControl.

    J’ai écrit un simple conseil pour ce problème sur mon blog.

    Dans ce cas, vous devez écrire le View et le ViewModel comme suit:

      General Contact Address Phone  

     public enum Note { General, Contact, Address, Phone, } ... Note note = Note.General; public Note Note { get { return this.note; } set { if (this.note == value) return; this.note = value; OnPropertyChanged("Note"); OnPropertyChanged("IsGeneralNote"); OnPropertyChanged("IsContactNote"); OnPropertyChanged("IsAddressNote"); OnPropertyChanged("IsPhoneNote"); } } public bool IsGeneralNote { get { return Note == Note.General; } set { Note = value ? Note.General : Note; } } public bool IsContactNote { get { return Note == Note.Contact; } set { Note = value ? Note.Contact : Note; } } public bool IsAddressNote { get { return Note == Note.Address; } set { Note = value ? Note.Address : Note; } } public bool IsPhoneNote { get { return Note == Note.Phone; } set { Note = value ? Note.Phone : Note; } } ... 

    vous devez définir UpdateSourceTrigger = “PropertyChanged” à la liaison XAML comme