从该项返回后无法导航到ListBox项

时间:2012-01-02 04:00:25

标签: c# wpf xaml listbox

我有一个ListBox,它是从XML源和数据绑定中填充的,以便为我提供值,然后我将其设置为在选中时导航到Relative Uri。

我的问题是,当我使用后面的硬件按钮时,我无法选择我之前选择的项目。如果我对后退按钮导航进行硬编码,我就玩了并开始工作,但我确信有一种更简洁的解决方法。

代码可以在下面找到,任何帮助将不胜感激。

XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox x:Name="ABCitems" SelectionChanged="ABC_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,0" Width="432" Height="100">
                    <TextBlock Text="{Binding name}" 
                               Margin="62,0,0,0" 
                               TextWrapping="Wrap"   
                               Style="{StaticResource PhoneTextExtraLargeStyle}"
                               Foreground="Black" />
                    <Image Height="50" 
                           Width="50" Margin="0,-50,0,0" 
                           HorizontalAlignment="Left" 
                           VerticalAlignment="Center" 
                           Source="{Binding image}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

XAML.CS

private void ABCitems_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (ABCitems.SelectedItem != null)
    {
        Menu m = ABCitems.SelectedItem as Menu;

        if (m.extUri.IsAbsoluteUri == true)
        {
            string link = m.extUri.ToString();

            NavigationService.Navigate(
                new Uri("/Web.xaml?link=" + link, UriKind.Relative));
        }

        else
        {
            NavigationService.Navigate(m.extUri);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定你是否在wpf上使用MVVM模式..但是如果你想在导航时保持视图上的值我认为你应该开始使用MVVM模式..我没有在WPF上试过这个但在我的一个Silverlight应用程序我所做的是创建一个静态类,其工作方式类似于使用静态字典的SessionManager。并且从视图导航我将ViewModel存储到我的Session ...当我使用后退按钮回到我的视图时,我尝试从我的Session获取ViewModel并再次将其设置为DataContext ...

     public Page1()
    {
        InitializeComponent();

        if (SessionManager.Exist("PageViewModel"))
        {
            this.DataContext = SessionManager.Get<Page1ViewModel>("PageViewModel");
        }
        else
            this.DataContext = new PageViewModel();
    }

这里SessionManager将是一个静态类,包含用于保存对象的Dictionary。

希望这可能是一个很好的指针。

问候。