从App.xaml.cs访问数据透视控件
本文关键字:数据 透视 控件 访问 cs App xaml | 更新日期: 2023-09-27 18:23:55
在我的MainPage.xaml
中,我创建了一个Pivot控件:<controls:Pivot Title="Powder God" Name="PivotControl">
。
我的第一个透视图是一个HubTile
,它总结了所有其他单独的页面。因此,我的应用程序栏在第一个透视图和所有其他透视图之间会有所不同。
这就是为什么我把我的应用程序栏放在App.xaml
的资源部分,然后根据我的透视图的选定索引加载。
我的问题是:
在我将用于所有单独页面的应用程序栏中,我希望有一个删除选项,从数据上下文中删除该特定项目(视图模型)。
我知道我可以使用PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
访问导航服务,但我不知道如何引用我的pivot,这样我就可以获得所选的索引并继续前进。
谢谢!
使用MVVM,您不应该这样做:
((PageType)Application.Current.RootVisual).PivotControl. //Blah
PageType是包含数据透视控件的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
方面做得更好,这样人们就不会想这么做了。我发现,即使使用MVVMLight这样的框架,使用ApplicationBar也会迫使您向Page.xaml.cs
添加代码。这在MVVM中仍然可以,因为它是视图中的特定于UI的代码,但如果您在其他地方使用ICommand
,则会导致不一致。上次我决定最好用代码创建整个ApplicationBar
,而不是通过App.xaml.cs
破解这种东西。
更新:有一个UserVoice请求可绑定数据的ApplicationBar。