Я пытаюсь переключить содержимое элемента управления содержимым с помощью ICommands. Теперь настройка этого свойства работает в конструкторе, но не в любой из команд.Связывание ContentControl с DataTemplate работает только в конструкторе?
У меня есть это в моей app.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>
Это фрагмент из ShellView.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;
}
Я делаю что-то неправильно здесь?
Это свойство также изменилось для модели текущего вида. Должен добавить это раньше.
public ViewModelBase CurrentViewModel
{
get
{
return _currentViewModel;
}
set
{
if (_currentViewModel == value)
return;
_currentViewModel = value;
RaisePropertyChanged("CurrentViewModel");
}
}
Похоже, вы используете MVVM, но я мог ошибаться, но я просто хотел сказать, что еще не добрался до этого. Однако мне любопытно, является ли CurrentViewModel зависимым свойством или запускает PropertyChanged? – Silvermind
Да, я бы пометил его, но это не похоже на конкретную проблему MVVM. Я добавил код PropertyChanged выше. – benjgorman
Код здесь выглядит правильно. Установили ли вы контрольную точку в ExecuteDeviceViewCommand, чтобы убедиться, что вызов вызывается нажатием кнопки2? –