Изменить содержимое с помощью 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;
}
}