0

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

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

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

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

页面列表视图

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

1 回答 1

1

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

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

于 2017-04-26T15:43:34.820 回答