我正在尝试将MVVM模式应用于MVVM Light。我有一个数据绑定(bind)的ListBox ...

MainView.xaml [摘录]

<ListBox Name="recipesListBox"
                             ItemsSource="{Binding RecipeList}"
                             SelectedItem="{Binding SelectedRecipe, Mode=TwoWay}"
                             HorizontalAlignment="Stretch"
                             VerticalAlignment="Stretch"
                             Grid.Row="1"
                             Margin="12,0,12,0"
                             SelectionChanged="recipesListBox_SelectionChanged" >

MainViewModel.cs [摘录]
    private Recipe selectedRecipe;

    public Recipe SelectedRecipe
    {
        get
        {
            return selectedRecipe;
        }
        set
        {
            selectedRecipe = value;
            RaisePropertyChanged("SelectedRecipe");
        }
    }

...在SelectionChanged上执行页面导航:

MainView.xaml.cs [摘录]
private void recipesListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string destination = "/RecipeView.xaml";
            if (recipesListBox.SelectedIndex == -1) // If selected index is -1 (no selection) do nothing
                return;
            this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));
            //recipesListBox.SelectedIndex = -1; // Reset selected index to -1 (no selection)
        }

////之后,您可以看到在页面导航后重置索引的旧代码-现在,对于绑定(bind)的数据,显然它还将我选择的项目设置为null!返回时,我该如何导航到新 View ,显示所选项目的属性并重置所选索引?谢谢!

最佳答案

我这样做的方式是这样的:

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    if (listBox.SelectedItem != null)
    {
        listBox.SelectedIndex = -1;
    }

    base.OnNavigatedFrom(e);
}

然后将以下内容添加到SelectionChanged事件
if(SelectedItem != null)
{
    // Do something with SelectedItem
}

关于silverlight - ListBox SelectedItem绑定(bind)到: page navigation,获取项,在新 View 中显示其属性并重置SelectedIndex。我能怎么做?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11002049/

10-12 16:03
查看更多