Связь UWP SplitView с использованием событий

У меня есть разделенное представление внутри MainPage с его панелью и содержимым, определенным как '

Панель Frame содержит страницу с PageListView. Когда нажимаются элементы в представлении списка, я хочу обновить рамку содержимого.

В объявлении страницы списка у меня есть обработчик события делегата, называемый ItemChangedEventHandler. Когда элемент списка щелкнут, я вызываю EventHandler, который затем уведомляет все объекты, подписанные на событие.

Моя проблема в том, что у меня нет ссылки на панель Page. Есть ли способ создать экземпляр страницы, а затем передать ее методу Navigate? Если бы я мог создать его экземпляр перед переходом к нему, я мог бы сослаться на PageListView.ItemChanged, который не был бы нулевым, как в приведенном ниже коде, и добавить обработчик событий было бы хорошо. Я не знаю, как это сделать. Любые предложения были бы замечательными.

PageListView

public delegate void ItemChangedEventHandler(object sender, Item item);

public sealed partial class PageListView : Page
{

private void PageListView_ItemClick(object sender, ItemClickEventArgs e)
    {
        Item item = (Item)e.ClickedItem;
        ItemChanged(this, item);
    }
}

Главная страница

public MainPage()
  {
        this.InitializeComponent();

        SplitViewPaneFrame.Navigate(typeof(PageListView));

        PageListView.ItemChanged += new ItemChangedEventHandler(Item_Clicked);
  }

  private void Item_Clicked(Object sender, Item item)
  {
        SplitViewContentFrame.Navigate(typeof(DetailPage), item);
  }

person renners    schedule 25.04.2017    source источник
comment
Зачем вам страница в Пане? Вы можете поместить ListView непосредственно в панель, а затем напрямую подписаться на событие ItemChanged.   -  person AVK    schedule 25.04.2017


Ответы (1)


Я думаю, что лучшим подходом было бы иметь модель представления, инкапсулирующую состояние (текущий выбор в разделенном представлении). Оба фрейма могут связываться с одним и тем же экземпляром класса модели представления и, таким образом, совместно использовать информацию. Это также будет работать, если у вас есть несколько кадров, которые необходимо обновить в соответствии с выбором в ListView.

Типичным случаем для этого шаблона является программа для чтения электронной почты или RSS-ридер. См. этот пример для эталонной реализации: https://github.com/Microsoft/Windows-appsample-rssreader/tree/master/RssReader

person zmit    schedule 26.04.2017