从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,这样我就可以获得所选的索引并继续前进。

谢谢!

从App.xaml.cs访问数据透视控件

使用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。