これはおそらく重複した質問ですが、問題の解決策が見つかりませんでした。
私はMVVMパターンを使用してWPFアプリケーションに取り組んでいます。
ViewModel にバインドされた 4 つのビューがあります。すべての ViewModel は BaseViewModel を親として持ちます。
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));
}
}
}
MainView には BusyIndicator が含まれています。
<extWpfTk:BusyIndicator IsBusy="{Binding IsBusy}">
<ContentControl />
</extWpfTk:BusyIndicator>
MainViewModel で IsBusy = true を設定すると、BusyIndicator が表示されます。
他の ViewModel から IsBusy = true を設定しようとすると、BusyIndicator が表示されません。
念のために言っておきますが、MVVMLight のようなサードパーティ ライブラリをプロジェクトで使用して、Messenger を使用して ViewModel 間で通信することはできません。
メインビュー:
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
}
}
ViewModel1:
public class ViewModel1 : ViewModelBase
{
RelayCommand _testCommand;
public ViewModel1()
{
}
public ICommand TestCommand
{
get
{
if (_testCommand == null)
{
_testCommand = new RelayCommand(
param => this.Test(),
param => this.CanTest
);
}
return _testCommand;
}
}
public void Test()
{
//IsBusy = true; - BusyIndicator is not shown
}
bool CanTest
{
get
{
return true;
}
}
}