使用事件进行UWP SplitView通信

时间:2017-04-25 14:04:43

标签: windows events uwp uwp-xaml splitview

我在MainPage内部有一个拆分视图,其窗格和内容定义为's

窗格框架包含一个具有PageListView的页面。单击列表视图中的项目时,我希望更新内容框架。

在listview页面的声明中,我有一个名为ItemChangedEventHandler的委托事件处理程序。单击listview项时,我调用EventHandler,然后通知所有订阅该事件的对象。

我的问题是我没有对窗格页面的引用。有没有办法实例化一个页面,然后将其传递给Navigate方法?如果我可以在导航到它之前实例化它,那么我可以引用PageListView.ItemChanged,它不会是null,因为它在下面的代码中并添加事件处理程序就可以了。我不知道该怎么做。任何建议都会很棒。

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);
    }
}

的MainPage

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);
  }

1 个答案:

答案 0 :(得分:1)

我认为更好的方法是让视图模型封装状态(拆分视图上的当前选择)。两个帧都可以绑定到视图模型类的同一实例,从而共享信息。如果你有多个帧需要根据ListView上的选择进行更新,这也会有效。

此模式的常见情况是电子邮件阅读器或RSS阅读器。请参阅此示例以获取参考实现:https://github.com/Microsoft/Windows-appsample-rssreader/tree/master/RssReader