我在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);
}
答案 0 :(得分:1)
我认为更好的方法是让视图模型封装状态(拆分视图上的当前选择)。两个帧都可以绑定到视图模型类的同一实例,从而共享信息。如果你有多个帧需要根据ListView上的选择进行更新,这也会有效。
此模式的常见情况是电子邮件阅读器或RSS阅读器。请参阅此示例以获取参考实现:https://github.com/Microsoft/Windows-appsample-rssreader/tree/master/RssReader