title: BusyIndicator using MVVM
body: <p>This is probably duplicated question, but i could not find solution for my problem.</p>
  
  <p>I'm working on WPF application using MVVM pattern.</p>
  
  <p>There are four views which are binded to their ViewModels. All ViewModels have BaseViewModel as parent.</p>
  
  <pre><code>public abstract class ViewModelBase : INotifyPropertyChanged
  {
      private bool isbusy;
  
      public bool IsBusy
      {
          get
          {
              return isbusy;
          }
          set
          {
              isbusy = value;
              RaisePropertyChanged("IsBusy");
          }
      }
  
      public event PropertyChangedEventHandler PropertyChanged;
  
      protected void RaisePropertyChanged(string propertyName)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
  
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(propertyName));
          }
      }
  }
  </code></pre>
  
  <p>MainView contains BusyIndicator:</p>
  
  <pre><code>&lt;extWpfTk:BusyIndicator IsBusy="{Binding IsBusy}"&gt;
          &lt;ContentControl /&gt;
      &lt;/extWpfTk:BusyIndicator&gt;
  </code></pre>
  
  <p>If I set IsBusy = true in MainViewModel, BusyIndicator is shown.</p>
  
  <p>If I try to set IsBusy = true from other ViewModels, BusyIndicator is not shown.</p>
  
  <p>Just to notice, I can not use 3rd party libraries in my project like MVVMLight in order to use their Messenger to communicate between ViewModels.</p>
  
  <p>MainView:</p>
  
  <pre><code>public class MainWindowViewModel : ViewModelBase
  {
      public ViewModel1 ViewModel1 { get; set; }
      public ViewModel2 ViewModel2 { get; set; }
      public ViewModel3 Model3 { get; set; }
  
      public MainWindowViewModel()
      {
          ViewModel1 = new ViewModel1();
          ViewModel2 = new ViewModel2();
          ViewModel3 = new ViewModel3();
          //IsBusy = true; - its working
      }
  }
  </code></pre>
  
  <p>ViewModel1:</p>
  
  <pre><code>public class ViewModel1 : ViewModelBase
  {
      RelayCommand _testCommand;
  
      public ViewModel1()
      {
      }
  
      public ICommand TestCommand
      {
          get
          {
              if (_testCommand == null)
              {
                  _testCommand = new RelayCommand(
                      param =&gt; this.Test(),
                      param =&gt; this.CanTest
                      );
              }
              return _testCommand;
          }
      }
  
      public void Test()
      {
          //IsBusy = true; - BusyIndicator is not shown
  
      }
  
      bool CanTest
      {
          get 
          { 
              return true; 
          }
      }
  }
  </code></pre>