在WP7中绑定Panorama.SelectedIndexProperty

时间:2011-02-01 03:09:09

标签: windows-phone-7 mvvm-light

首先,SelectedIndex没有在标记中公开,所以你必须在后面的代码中进行,对吧?

其次,我在代码中设置了绑定:

Binding binding = new Binding("Main.PanoSelectedIndex.ObservedObject");
binding.Mode = BindingMode.TwoWay;
rootPano.SetBinding(Panorama.SelectedIndexProperty, binding);`

(ObservedObject实现iNotifyChanged)

绑定路径指向我的主视图模型,我可以看到PanoramaItem正在更新绑定。但是,当其他内容(MVVM Light命令)更改绑定时,全景图不会响应。有什么想法吗?

谢谢, 罗杰

2 个答案:

答案 0 :(得分:1)

引用Windows Phone Developer FAQ

  

全景图的设计使用户处于控制之中,因此您无法以编程方式设置SelectedIndex,或强制导航到全景图项目。

     

您可以设置DefaultItem,以便在首次启动全景图时,全景图导航到该项目,但您无法以编程方式导航。也可以使用DefaultItem,以便后退导航感觉就像用户所在的项目没有改变。

更新:您可以使用DefaultItem保存/恢复Panorama的选择,如下所示(来自Jeff Prosise的recent blog post的代码):

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
 // Save the Panorama control's SelectedIndex in page state
 State["Index"] = PanoramaControl.SelectedIndex;
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
 // Restore the Panorama control's SelectedIndex
 if (State.ContainsKey("Index"))
 PanoramaControl.DefaultItem = PanoramaControl.Items[(int)State["Index"]];
}

答案 1 :(得分:0)

据我所知,SelectedIndex是Panorama中的readonly属性(Weired为什么WP7 SDK只读它)。因此,您只能将UI更改回VM,并且无法通过VM属性更改来更新UI。

DefaultItem是用于以编程方式设置索引的属性。

再次以编程方式设置已经实例化的Panorama的问题是,Title和Panoramaitem的对齐不会同步。无论如何,我并不沮丧,但仍有一些机会在那里进行黑客攻击。