我有一个 observableCollection 绑定到我的 UI 中的枢轴控件。当我尝试更新集合(清除()项目并重新创建)时,一切正常,除非枢轴控件的 selectedIndex 大于或等于 2。
在这种情况下,当我尝试将 Add() 调用到可观察集合时,我得到一个 ArgumentOutOfRange 异常。这很奇怪。
我尝试创建一个新的可观察集合,然后在那里添加()项目,这似乎有效,但除非我调用我的更新函数两次,否则我不会刷新 UI。
有什么问题?这是一个错误吗?
我有一个 observableCollection 绑定到我的 UI 中的枢轴控件。当我尝试更新集合(清除()项目并重新创建)时,一切正常,除非枢轴控件的 selectedIndex 大于或等于 2。
在这种情况下,当我尝试将 Add() 调用到可观察集合时,我得到一个 ArgumentOutOfRange 异常。这很奇怪。
我尝试创建一个新的可观察集合,然后在那里添加()项目,这似乎有效,但除非我调用我的更新函数两次,否则我不会刷新 UI。
有什么问题?这是一个错误吗?
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 =)
我将尝试修复建议的@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);
}
同样,这不是最好的解决方法,但它可以正常工作,并且淡入实际上是我可能会在其他地方使用的东西。
为了尝试节省负载和性能开销,框架仅加载当前显示的枢轴和两侧的枢轴。其他项目在显示相邻项目时延迟加载。因此,在尝试将 SelectedItem 设置为尚未加载的项目或页面尚未完全加载完成时,您可能会遇到问题。
如果您可以分享一些代码来演示您正在尝试做什么,我们可能会提供一些更具体的帮助。
如前所述。Pivot 控件已优化为不加载所有面板。如果您正在尝试我认为您正在尝试的东西,那么我建议您切换到初始化所有 PanoramaItems 的全景控件。