Передача данных между страницами Page

172
28 ноября 2017, 19:18

Доброго времени суток, Господа. У меня есть приложение, которое имеет одно окно, в нем определен Frame контрол, и несколько страниц. Все страницы наследуются от этого класса:

public class BasePage<VM> : Page where VM : BasePageViewModel, new()
{
    private VM viewModel;
    public VM ViewModel
    {
        get {  return viewModel; }
        set
        {
            if( viewModel == value )
                return;
            viewModel = value;
            this.DataContext = viewModel;
        }
    }
    public BasePage( IPageNavigator pageNavigator )
    {
        ViewModel = new VM();
        ViewModel.PageNavigator = pageNavigator;
    }
}

Объект, представляющий экземпляр наследника IPageNavigator, выглядит таким образом:

public class PageNavigator : BaseViewModel, IPageNavigator
{
    private Dictionary<Type, Page> pages = new Dictionary<Type, Page>();
    public Page CurrentPage { get; set; }
    public void NextPage<T>()
    {
        Type key = typeof( T );
        if( pages.TryGetValue( key, out var value ) )
        {
            CurrentPage = value;
            return;
        }
        Page page = (Page)Activator.CreateInstance( typeof( T ), this );
        pages.Add( key, page );
        CurrentPage = page;
    }
}

он создается в MainWindowViewModel - ViewModel главного окна и сразу же устанавливается стартовая страница:

PageNavigator = new PageNavigator();
PageNavigator.NextPage<MainPage>();

свойство public Page CurrentPage { get; set; } соответственно привязано к Frame.

Теперь вопрос: Как передавать данные между страницами? К примеру в MainPage у меня в ListBox отображен некий список, по нажатию на пункт списка, должен произойти переход на другую страницу CalculatorPricePage с передачей пункта в виде параметра. Я сделал команду в MainPage, при срабатывании которой, происходит такой обработчик:

private void OnCalculatorPriceProductRequest( Product product )
{
    // Как передать product в CalculatorPriceProductPage???
    // Осуществляем переход
    PageNavigator.NextPage<CalculatorPriceProductPage>();
}

Не подскажете как это можно правильно реализовать в рамках MVVM?

READ ALSO
переименовать проект visual studio

переименовать проект visual studio

Как быстро и безболезненно переименовать рабочий проект в visual studio 2008? По глупости оставил стандартное WindowsFormsApplications, теперь хочу назвать...

308
Функция vba на c#

Функция vba на c#

Подскажите, как написать такую же функцию на c#

207
ASP.NET MVC RoleProvider

ASP.NET MVC RoleProvider

Добрый день! В базе данных имеется таблица с ролями и три таблицы, отвечающие за пользователей: заказчик, типография и администраторЭти три...

205
Как удалить из массива слова имеющие определённую комбинацию букв

Как удалить из массива слова имеющие определённую комбинацию букв

Исключить из введенного предложения все слова, которые содержат заданную пользователем комбинацию из двух символов

432