По сути, у меня есть приложение с главным экраном, который состоит из основного пустого экрана, на котором пользователь может отображать другие представления, и боковой панели навигации сбоку. Однако когда я открываю другое представление, которое отображается в основной части экрана, оно также закрывает расширенную часть панели навигации. Причины, почему это происходит, вполне очевидны.
Чтобы это исправить, я решил разделить панель навигации и главный экран на два отдельных представления, чтобы было проще манипулировать иерархией представления, чтобы панель навигации всегда оставалась сверху, над всеми другими отображаемыми представлениями. К моему разочарованию, такой опции, похоже, не существует, поэтому я придумал другую идею - переключить активный вид при нажатии кнопки "открыть меню" и изменить его обратно на текущий при повторном нажатии.Вот как сейчас выглядит вид с боковой панелью навигации:
Код: Выделить всё
[*]
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ApkaJezykowa.Main;
using System.Windows.Input;
using ApkaJezykowa.Commands;
using ApkaJezykowa.MVVM.Model;
using System.Threading;
using ApkaJezykowa.Repositories;
using System.Security.Principal;
using System.Timers;
namespace ApkaJezykowa.MVVM.ViewModel
{
public class MainViewModel : BaseViewModel
{
private BaseViewModel _selectedViewModel;
private BaseViewModel _mainView;
public BaseViewModel SelectedViewModel
{
get { return _selectedViewModel; }
set { _selectedViewModel = value;
OnPropertyChanged(nameof(SelectedViewModel));
}
}
public BaseViewModel MainView
{
get { return _mainView; }
set
{
_mainView = value;
OnPropertyChanged(nameof(MainView));
}
}
public ICommand UpdateViewCommand { get; set; }
public ICommand UpdateMainViewCommand { get; set; }
public MainViewModel()
{
UpdateViewCommand = new UpdateViewCommand(this);
UpdateMainViewCommand = new UpdateMainViewCommand(this);
}
}
}
//some unecessary code had been removed for better readability
Пример для панели навигации:
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
using ApkaJezykowa.MVVM.ViewModel;
namespace ApkaJezykowa.Commands
{
internal class UpdateViewCommand : ICommand
{
private MainViewModel viewModel;
public UpdateViewCommand(MainViewModel viewModel)
{
this.viewModel = viewModel;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
if(parameter.ToString() == "Lessons")
{
viewModel.SelectedViewModel = new LessonsViewModel();
}
if (parameter.ToString() == "Dictionary")
{
viewModel.SelectedViewModel = new DictionaryViewModel();
}
if (parameter.ToString() == "Info")
{
viewModel.SelectedViewModel = new InfoViewModel();
}
if (parameter.ToString() == "Settings")
{
viewModel.SelectedViewModel = new SettingsViewModel();
}
if(parameter.ToString() == "Editor")
{
viewModel.SelectedViewModel = new LessonEditorViewModel();
}
}
}
}
Итак, в настоящее время я вижу два-три способа решения всей этой путаницы:
- Либо выяснить, как манипулировать иерархией ViewModels, и сделать так, чтобы навигация всегда выбиралась с помощью какого-то параметра (я понятия не имею, как это сделать). достичь),
- Или полностью переписать систему команд обновления представления на что-то более гибкое, что также позволило бы мне реализовать идею с динамически выбранными моделями просмотра и в целом сделать весь код приложения менее запутанным (что я также понятия не имею, как реализовать),
- Полный редизайн всей боковой панели навигации, так как я предполагаю, что текущий дизайн тоже может быть несовершенным.
Подробнее здесь: https://stackoverflow.com/questions/791 ... m-figuring
Мобильная версия