点击ListBox后绑定数据MVVM

时间:2014-05-23 21:39:48

标签: c# wpf mvvm

这是我的情况: - 我有一个WebApi,它向我发送一个json数据。 - 我的应用程序读取此数据并将所有信息绑定在列表框中 - 当我点击列表框的项目时,我想显示有关该项目的所有信息

问题是:如何在新视图上绑定数据? 这是点击后的代码(MainViewModel):

this.ProfessorDetail = new RelayCommand(() =>
{
if (SelectedIndexProfessors != -1)
    {
         //This variable contain all detail information
         Professor x = Professors.ElementAt(SelectedIndexProfessors);
         //Open new page
         App.RootFrame.Navigate(new Uri("/Pages/ProfessorDetailPage.xaml", UriKind.RelativeOrAbsolute));
    }
});

2 个答案:

答案 0 :(得分:1)

您可以使用Uri参数在页面之间传递简单的字符串信息。例如,在RelayCommand传递有关所选教授的唯一信息:

.........
//pass selected professor Id to ProfessorDetailPage
App.RootFrame.Navigate(new Uri("/Pages/ProfessorDetailPage.xaml?professorId=" + x.ProfessorId, UriKind.RelativeOrAbsolute));
.........

然后在ProfessorDetailPage的{​​{1}}或Loaded事件处理程序中获取uri参数并相应地显示信息:

NavigatedTo

答案 1 :(得分:0)

我从未创建过基于页面的应用程序,但我查看了this链接,并且从WPF的基本知识来看,我知道您需要像您要求的那样设置该页面的DataContext

请查看链接中的以下代码:

this.Frame.Navigate(typeof(BasicPage2), tb1.Text);

即将tb1中输入的文字发送到您导航到的对象。然后看看接收对象如何利用该信息:

private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    string name = e.NavigationParameter as string;
    ....
}

你会想要遵循同样的想法,除了你想要做的事情:

App.RootFrame.Navigate(new Uri(".....", ...), x);

然后在页面本身中,您将要在ProfessorDetailPage控件中设置LoadState事件并在其中执行:

Professor prof = x as Professor;
if( prof != null)
{
    this.DataContext = prof;
}

应设置DataContext的{​​{1}},并填充您的数据。

让我知道它是如何运作的,希望这有帮助!