使用事件的 UWP SplitView 通信

UWP SplitView Communication Using Events

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

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

在列表视图页面的声明中,我有一个名为 ItemChangedEventHandler 的委托事件处理程序。单击列表视图项时,我调用 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);
    }
}

主页

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

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

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