3

我有一个 observableCollection 绑定到我的 UI 中的枢轴控件。当我尝试更新集合(清除()项目并重新创建)时,一切正常,除非枢轴控件的 selectedIndex 大于或等于 2。

在这种情况下,当我尝试将 Add() 调用到可观察集合时,我得到一个 ArgumentOutOfRange 异常。这很奇怪。

我尝试创建一个新的可观察集合,然后在那里添加()项目,这似乎有效,但除非我调用我的更新函数两次,否则我不会刷新 UI。

有什么问题?这是一个错误吗?

4

5 回答 5

1

You have probably alreade solved it but here is what I did. As mentioned before this is a known "bug"/limitation. You can however set the SelectedIndex in the Loaded event for the page.

See here: http://christian-helle.blogspot.com/2011/02/working-around-pivot-selectedindex.html

This helped me and it works just fine now =)

于 2011-02-12T22:49:37.667 回答
1

这是一个已知的问题。

将枢轴控件 SelectedItem/SelectedIndex 属性设置为第三个枢轴项 (WP7) 时出现未处理的异常

不将导航/(绑定?)推迟到加载的事件是一种解决方法。

于 2010-12-28T11:21:03.120 回答
0

我将尝试修复建议的@Jimmy Engtröm。但是,我也可以通过等待负载发生来解决此问题。

<controls:Pivot x:Name="pivotCtrl" Title="{Binding ApplicationTitle}" 
Loaded="OnPivotControlLoaded" Opacity="1">

在页面后面的代码中:

private void OnPivotControlLoaded(object sender, RoutedEventArgs e)
{
    // Restore the Pivot control's SelectedIndex
    if (State.ContainsKey(SelectedPivotIndexKey))
    {
        pivotCtrl.SelectedIndex = State.Get<int>(SelectedPivotIndexKey);
    }

    myStoryboard.Begin();
}

现在,为什么是故事板?好吧,当你等到加载时,你会看到第一个枢轴,这很糟糕。所以情节提要会快速淡入……足以掩盖修复。我尝试只设置可见性,但这会使应用程序崩溃。另请注意,出于设计目的,我将透视控件的 XAML 中的不透明度设置为 1。这是故事板:

<Storyboard x:Name="myStoryboard">
    <DoubleAnimation
        Storyboard.TargetName="pivotCtrl"
        Storyboard.TargetProperty="Opacity"
        From="0.0" To="1.0" Duration="0:0:01"
        />
</Storyboard>

以下是辅助函数(放置在单独的类文件中并被引用,例如使用 MyApp.Helpers 并且类文件需要引用 System.Collections.Generic)

public static T Get<T>(this IDictionary<string, object> dictionary, string key)
{
    return (T)dictionary[key];
}

public static void AddOrReplace<T>(this IDictionary<string, T> dictionary, string key, T item)
{
    if (dictionary.ContainsKey(key))
        dictionary.Remove(key);

    dictionary.Add(key, item);
}

同样,这不是最好的解决方法,但它可以正常工作,并且淡入实际上是我可能会在其他地方使用的东西。

于 2011-02-14T23:50:47.287 回答
0

为了尝试节省负载和性能开销,框架仅加载当前显示的枢轴和两侧的枢轴。其他项目在显示相邻项目时延迟加载。因此,在尝试将 SelectedItem 设置为尚未加载的项目或页面尚未完全加载完成时,您可能会遇到问题。

如果您可以分享一些代码来演示您正在尝试做什么,我们可能会提供一些更具体的帮助。

于 2010-12-20T14:12:51.107 回答
0

如前所述。Pivot 控件已优化为不加载所有面板。如果您正在尝试我认为您正在尝试的东西,那么我建议您切换到初始化所有 PanoramaItems 的全景控件。

于 2010-12-21T11:33:51.103 回答