Не работает привязка данных между ContentControl в XAML

Рейтинг: 0Ответов: 0Опубликовано: 15.01.2023

создаю программу на 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;
            });
        }

    }
}

Ответы

Ответов пока нет.