我有一个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);
}
}
}
答案 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。
希望这可能是一个很好的指针。
问候。