2017-01-30 23 views
1

私はmvvm(もちろんmvvlight)のnewbeeです。私は3つのモデルビューを持っています(MainWindowにはコンテナがあり、もう1つのモデルビューにはLoginとMenu)。 LoginModelViewでは、ユーザーログインが成功すると、MainWindowコンテナのページを変更するMenuViewModel(Messenger.Defaultとともに)を呼び出します。それまではすべてが問題なく、次にMessage.Default.Sendを呼び出して、LoginModelViewから正しく受信されたMenuModelViewにオブジェクトを送信し、関連付けられたオブジェクトを捕捉し、RelayCommandを定義するメソッド(ConfiguraMenu)を実行します。メソッドは例外なしで実行されます)、問題はRelayCommandがLoginViewModelに戻って再びログインするまで動作していないことです。私はCommandManager.InvalidateRequerySuggested()を試して、どちらも動作していません。RelayCommandが実行/実行変更をリフレッシュしていません

これはLoginViewModelのコードです:

//This method is called when the user press the login button. No problem with this 
     public void ActionVerificaUsuario() 
     { 
      Miusuario = db.getUsuario(Txtusuario, Txtpassword); 
      if (Miusuario.esUsuario()) 
      { 
       Messenger.Default.Send(new MoveToViewMessage(Page.MenuView)); 
       Messenger.Default.Send((UsuarioModel)Miusuario); 
      } 
     } 

このコードはMenuViewModelのためである:

public RelayCommand AbreExeClaseCommand { get; private set; } 

    public MenuViewModel() 
     { 
      Messenger.Default.Register<UsuarioModel>(this, usuario_recibido => {Miusuario = usuario_recibido;ConfiguraMenu(); }); 

     } 

     private void ConfiguraMenu() { 
      Mimenu = new MenuModel(Miusuario); 
      AbreExeClaseCommand = new RelayCommand(() => { Messenger.Default.Send(new MoveToViewMessage(Page.NeverReachedView)); },() => Mimenu.Sw_reportes); 
      CommandManager.InvalidateRequerySuggested();    
      AbreExeClaseCommand.RaiseCanExecuteChanged(); 
     } 

私は真でCanExecuteをハードコーディングしようとしましたが、実行はバックまで作業をせずに残っ​​ています再度ログインしてください。

あなたが私を助けてくれることを祈っています。

  • Galasoft.MvvmLight.Command
  • Galasoft.MvvmLight.CommandWpf

はあなたのWPFアプリケーションで正しい名前空間Galasoft.MvvmLight.CommandWpfを使用していることを、確認してください:

答えて

2

MvvmLightは、二つの異なる名前空間に2つの異なるRelayCommandクラスを提供します。

MVVMLightにバグがあり、その結果、CanExecute()の動作が無効になりました。 MVVMLight Version V5.0.2の新しい.CommandWpf名前空間で修正しました。

詳細についてはthis GalaSoft blog postthe change logをご覧ください。

0

CanExecuteをプロパティにバインドしようとしました。

私はこのプロパティでRaisePropertie Changedを使用していないと思います。 あなたは次のようなものが必要です:

 public class MenuModel : ViewModelBase 
     { 
      // Other pieces of code.... 

      private bool _sw_reportes; 
      public bool Sw_reportes 
      { 
       get { return _sw_reportes; } 
       set { _sw_reportes = value; 
         RaisePropertyChanged(() => Sw_reportes); } 
      } 
     } 
関連する問題