2017-07-12 1 views
1

Je voudrais observer plusieurs propriétés dans mon viewmodel pour vérifier la méthode CanExecute.Comment observer plusieurs propriétés avec Delegatecommand.ObservesProperty

Question:

Comment enregistrer plus de propriétés?

Exemple:

class MyViewModel 
     { 
      public int myproperty1 { get; set; } 
      public int myproperty2 { get; set; } 

      public DelegateCommand MyCommand { get; set; } 

      public MyViewModel() 
      { 
       MyCommand = new DelegateCommand(MyCommandMethod,CanExecuteMyCommandMethod); 
       MyCommand.ObservesProperty((() => myproperty1)); 
       // line below doesnt work Exeception "Value is already observed". How to register more properties to observe? 
       MyCommand.ObservesProperty((() => myproperty2)); 

      } 

      private bool CanExecuteMyCommandMethod() 
      { 
       throw new NotImplementedException(); 
      } 

      private void MyCommandMethod() 
      { 
       throw new NotImplementedException(); 
      } 
     } 

Mise à jour:

événement PropertChanged se fait par Propertchanged.Fody INPC.

ObservesProperty est de RaiseCanExecuteChanged. La deuxième propriété d'observer l'enregistrement déclenche une exception « La valeur est déjà observée)

Question supplémentaire: ObservesProperty ((() => myProperty;

Permet la propriété multiple ou unique Si quelqu'un d'autre confirmer cette information. enregistrement multiple est possible?

Répondre

0

appel de la méthode ObservesProperty pour une autre propriété que vous faites devrait fonctionner. Mais vous devez déclencher l'événement PropertyChanged dans les setters des propriétés de la source pour la CanExecuteChanged événement à lever.

Veuillez vous reporter à l'exemple de code suivant.

public class MyViewModel : BindableBase 
{ 
    private int _myproperty1; 
    public int myproperty1 
    { 
     get { return _myproperty1; } 
     set { _myproperty1 = value; RaisePropertyChanged(); } 
    } 

    private int _myproperty2; 
    public int myproperty2 
    { 
     get { return _myproperty2; } 
     set { _myproperty2 = value; RaisePropertyChanged(); } 
    } 

    public DelegateCommand MyCommand { get; set; } 

    public MyViewModel() 
    { 
     MyCommand = new DelegateCommand(MyCommandMethod, CanExecuteMyCommandMethod); 
     MyCommand.ObservesProperty((() => myproperty1)); 
     MyCommand.ObservesProperty((() => myproperty2)); 
    } 

    private bool CanExecuteMyCommandMethod() 
    { 
     return true; 
    } 

    private void MyCommandMethod() 
    { 

    } 
} 
+0

ObservesProperty est de RaiseCanExecuteChanged. Le INotifiyPropertyChanged est fait par Propertychanged.Fody INPC. La deuxième propriété observe l'enregistrement lever une exception "La valeur est déjà observée." – Shazter

+0

Avez-vous copié mon exemple de code? Cela fonctionne pour moi ... – mm8

+0

Ok, alors je dois comprendre, qui a déjà fait l'enregistrement, peut-être un bon 3ème – Shazter