私はICommandsを使用してコンテンツコントロールのコンテンツを切り替えようとしています。このプロパティを設定すると、コンストラクタでは動作しますが、コマンドでは動作しません。コンストラクタでのみ動作するDataTemplateからのContentControlのバインド?
私はこれが(私が変更したいコンテンツコントロールが含まれている図である)ShellView.xamlからの抜粋である
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<DataTemplate DataType="{x:Type vm:HomeViewModel}">
<views:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:DeviceViewModel}">
<views:DeviceView />
</DataTemplate>
</Application.Resources>
私app.xamlでこれを持っている:
<ContentControl Content="{Binding Path=CurrentViewModel}" />
ボタンバインディングを示す別のスニペット:
<Button Content="Button"
Height="23"
Name="button2"
Width="75"
Command="{Binding Path=DeviceViewCommand}" />
ここは、ShellViewのコンストラクタですモデル。 CurrentViewModelの設定はここではうまくいきました。 (デバイスを設定した後、テストとしてホームに設定していることがわかります)
public ShellViewModel()
{
CurrentViewModel = ShellViewModel._deviceViewModel;
CurrentViewModel = ShellViewModel._homeViewModel;
HomeViewCommand = new RelayCommand(() => ExecuteHomeViewCommand());
DeviceViewCommand = new RelayCommand(() => ExecuteDeviceViewCommand());
LogOut = new RelayCommand(() => LogOutExecute(),() => true);
}
private void ExecuteDeviceViewCommand()
{
CurrentViewModel = ShellViewModel._deviceViewModel;
}
ここで何か問題がありますか?
これは、現在のビューモデルでも変更されたプロパティです。これを以前に追加したはずです。私が正しくあなたのprobledを理解している場合
public ViewModelBase CurrentViewModel
{
get
{
return _currentViewModel;
}
set
{
if (_currentViewModel == value)
return;
_currentViewModel = value;
RaisePropertyChanged("CurrentViewModel");
}
}
MVVMを使用しているようですが、私は間違っているかもしれませんが、私はまだそれに気づいていないと言いたかったのです。しかし、私は、CurrentViewModelが依存型プロパティか、またはPropertyChangedをトリガーするかどうか不思議ですか? – Silvermind
私はええ、私はそれをタグ付けしただろうが、それは特定のMVVMの問題ではないようです。上記のPropertyChangedコードを追加しました。 – benjgorman
ここのコードはすべて正しく見えます。 ExecuteDeviceViewCommandにブレークポイントを設定して、button2クリックで呼び出されていることを確認しましたか? –