2017-04-25 16 views
0

我的的MainPage內拆分視圖,其窗格和定義的UWP SPLITVIEW通信使用事件

窗格框架內容包含具有PageListView的頁面。當點擊列表視圖中的項目時,我希望更新內容框架。

在listview頁面的聲明中,我有一個名爲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); 
    } 
} 

的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

爲什麼你需要在窗格中的頁面?您可以直接在窗格中放置一個ListView,然後直接訂閱它上面的ItemChanged事件。 – AVK

回答

1

我認爲更好的辦法是有一個視圖模型封裝狀態(在拆分視圖當前選擇)。兩個框架都可以綁定到視圖模型類的同一個實例,從而共享信息。如果您有多個需要根據ListView上的選擇進行更新的框架,這也可以工作。

這種模式的一個常見情況是電子郵件閱讀器或RSS閱讀器。看到這個例子的參考實現:https://github.com/Microsoft/Windows-appsample-rssreader/tree/master/RssReader