Изменить содержимое с помощью ButtonClick, ContentControl WPF

Я сделал пример, где я изменяю контент с ComboBoxMenu:

<Border Grid.Row="1" Style="{StaticResource InsideBorders}">
        <ContentControl Content="{Binding ElementName=ComboBoxMenu, Path=SelectedItem}"/>
</Border>

Но как сделать то же самое для кнопки? Там у меня нет свойства "SelectedItem".

У меня есть две кнопки, с помощью которых я буду менять контент. Кнопки находятся в разных местах, а не в одной DockPanel или аналогичной, поэтому DataTemplate я думаю, что это невозможно. Или же?

1 ответ

В случае ComboBox Вы можете установить его ItemsSource но в случае кнопки вам нужно связать кнопку с объектом, на основе которого ContentControl корректирует свой вид. Я предлагаю создать список возможных значений и назначить каждое из них соответствующей кнопке.

C#:

enum ContentControlViewModel
{
    MainViewModel,
    SearchViewModel
}

XAML:

<Button Tag="{x:Static local:ContentControlViewModel.MainViewModel}"/>

Затем создайте стиль для всех кнопок, которые должны меняться ContentControlТочка зрения.

<Style TargetType="Button">
     <Setter Property="Command" Value="{Binding SetContentControlViewModel}"/>
     <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
</Style>

Затем в SetContentControlViewModel Команда все, что вам нужно сделать, это присвоить значение CurrentViewModel свойство, основанное на параметре. Ваш ContentControl привязывается к CurrentViewModel и настраивает вид.

private object _currentViewModel;

public object CurrentViewModel
{
     get { return _currentViewModel; }
     set
     {
         _currentViewModel = value;
         OnPropertyChanged();
     }
}

public void SetViewModel(ContentControlViewModel viewModel)
{
     switch (viewModel)
     {
          case ContentControlViewModel.MainViewModel:
          CurrentViewModel = new MainViewModel();
          break;
     }
}
Другие вопросы по тегам