Не работает привязка данных между ContentControl в XAML
создаю программу на c#. Использую WPF + MVVM парадигму. Создал 2 блока окна внутри MainWindow, которые вложены в тег XAML ContentControl. Header и CurrentView. К ним биндится функции, которые возвращают по нажатию кнопки в хедере определенный view.
Проблема в том, что до создания одного из ContentControl'ов все работало и по кнопкам можно было переходить на соответствующие страницы из header, потребовалось сделать два ContentControl'a и переходы перестали работать.
Вот код MainWindow.xaml:
<Window.DataContext>
<viewModel:MainViewModel/>
</Window.DataContext>
<Grid x:Name="layoutGrid" Background="#272537">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Grid.Column="0" Margin="40, 0, 40, 0" Content="{Binding CurrentHead}"/>
<ContentControl Grid.Row="1" Grid.Column="0" Margin="40, 0, 40, 0" Content="{Binding CurrentView}"/>
</Grid>
Код для Header.xml Кнопки в котором не работают
<UserControl.DataContext>
<viewModel:MainViewModel/>
</UserControl.DataContext>
<StackPanel Grid.Row="0" MinWidth="100" Margin="0,20,5,0" VerticalAlignment="Top" MaxWidth="950" Grid.ColumnSpan="4">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" FontSize="22" ></TextBlock>
<Button IsEnabled="True" Command="{Binding HomeViewCommand}" Height="80" Grid.Column="1" FontSize="20" Style="{StaticResource MaterialDesignOutlinedLightButton}">
<TextBlock TextAlignment="Center">Главная</TextBlock>
</Button>
<Button Command="{Binding LoginViewCommand}" Grid.Column="3" Content="Войти" Style="{StaticResource MaterialDesignFlatButton}" FontSize="20" Margin="0,24,47,0" Height="35" VerticalAlignment="Top"/>
<Button Command="{Binding RegistrationViewCommand}" Margin="0,24,-37,24" HorizontalAlignment="Right" Grid.Column="3" Content="Зарегистрироваться" Style="{StaticResource MaterialDesignFlatButton}" FontSize="20" Width="274" Grid.ColumnSpan="2"/>
</Grid>
</StackPanel>
Код MainViewModel.cs внутри которого функционал
namespace ReportPoliceSite.ViewModel
{
public class MainViewModel : BaseViewModel
{
public RelayCommand HeaderViewCommand { get; set; }
public RelayCommand RegistrationViewCommand { get; set; }
public RelayCommand HomeViewCommand { get; set; }
public RelayCommand LoginViewCommand { get; set; }
public RegistrationViewModel RegistrationVm { get; set; }
public LoginViewModel LoginVm { get; set; }
public HomeViewModel HomeVm { get; set; }
public HeaderViewModel HeaderVm { get; set; }
private object _currentView;
public object CurrentView
{
get { return _currentView; }
set
{
_currentView = value;
OnPropertyChanged();
}
}
private object _currentHead;
public object CurrentHead
{
get { return _currentHead; }
set
{
_currentHead = value;
OnPropertyChanged();
}
}
public MainViewModel()
{
HomeVm = new HomeViewModel();
RegistrationVm = new RegistrationViewModel();
LoginVm = new LoginViewModel();
HeaderVm = new HeaderViewModel();
CurrentView = HomeVm;
CurrentHead = HeaderVm;
HomeViewCommand = new RelayCommand(o =>
{
CurrentView = HomeVm;
});
LoginViewCommand = new RelayCommand(o =>
{
CurrentView = LoginVm;
});
RegistrationViewCommand = new RelayCommand(o =>
{
CurrentView = RegistrationVm;
});
HeaderViewCommand = new RelayCommand(o =>
{
CurrentHead = HeaderVm;
});
}
}
}
Источник: Stack Overflow на русском