【问题标题】:UWP SplitView Communication Using Events使用事件的 UWP SplitView 通信
【发布时间】:2017-04-25 14:04:42
【问题描述】:

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

窗格框架包含一个具有 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);
  }

【问题讨论】:

  • 为什么需要窗格中的页面?你可以在Pane中直接放一个ListView,然后直接在上面订阅ItemChanged事件。

标签: windows events uwp uwp-xaml splitview


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2016-04-27
    • 2016-03-06
    相关资源
    最近更新 更多