繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM