[英]Access Pivot Control from App.xaml.cs
在MainPage.xaml
,我創建了一個數據透視控件: <controls:Pivot Title="Powder God" Name="PivotControl">
。
我的第一個數據透視圖是一個HubTile
,它匯總了所有其他單獨的頁面。 因此,我的應用程序欄在第一個數據透視圖和所有其他透視圖之間將有所不同。
這就是為什么我將應用程序欄放在App.xaml
的資源部分中,然后根據所選透視圖索引進行加載的原因。
我的問題是:
在我將用於所有單個頁面的應用程序欄中,我想要一個刪除選項,在該選項中,我將從數據上下文中刪除該特定項(視圖模型)。
我知道我可以使用PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
來訪問導航服務,但是我不知道如何引用我的數據透視表,以便獲得所選索引並繼續前進。
謝謝!
使用MVVM,您不應這樣做:
((PageType)Application.Current.RootVisual).PivotControl. //Blah
PageType是包含您的PivotControl的PhoneApplicationFrame類型。 如果這不起作用,則需要在RootVisual中設置屬性
public Pivot MyPivot
{
get
{
return PivotControl;
}
}
((PageType)RootVisual).MyPivot. //Blah
微軟建議將ApplicationBar
放在App.xaml
是一個很好的建議,因為它可以在任何地方被引用,並且似乎鼓勵代碼重用:但是,這個問題突出了這種方法的局限性。 應用程序欄通常用於提供特定於當前頁面(或樞軸項目)的操作,並且僅僅因為按鈕相同,您可能不希望在每種情況下都運行完全相同的代碼。
在這種情況下,我認為最好創建一個工廠方法,該方法使用您為頁面/數據透視表項指定的單擊處理程序來創建公共ApplicationBar
。 為了獲得加分,將該方法放在一個新類(不是App
)中,這樣就不會在該類的所有重復代碼中丟失。 在頁面構造函數中調用此工廠方法,並在您的類中記住ApplicationBar
。 對於多個應用欄,請先創建它們,然后即可在Pivot SelectionChanged代碼中輕松地在這些應用欄之間切換。
在我看來,在App.xaml
中創建ApplicationBar,然后從App.xaml.cs
“資源” ResourceDictionary
中檢索此代碼的另一種選擇,就是修改單擊回調,這一點更加復雜。
我希望他們在實現ApplicationBar
做得更好,所以人們不想這樣做。 我發現即使使用MVVM Light之類的框架,使用ApplicationBar也會迫使您將代碼添加到Page.xaml.cs
。 在MVVM中,這仍然是可以的,因為它是屬於View的UI特定代碼,但是如果您在其他地方都使用ICommand
,則會使事情變得不一致。 上次我決定最好用代碼創建整個ApplicationBar
,而不是通過App.xaml.cs
破解此類東西。
更新:有一個UserVoice請求可綁定數據的ApplicationBar 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.