将列表框selectedItems从一个WPF页面发送到另一页面

时间:2018-12-07 20:38:10

标签: c# wpf xaml listbox

我正在尝试从主页上的列表框1选择项目,单击名为添加的按钮,然后将项目发送到新页面。但是我不认为我的方法是正确的。

MainPage.xaml.cs

private void btnAdd_Click(object sender, RoutedEventArgs e)
    {

        List<Names> tmp = new List<Names>();

         foreach(var names in lstNames.SelectedItems)
         {
             tmp.Add(names);
         }
         lstNames.ItemsSource = tmp;

        Frame.Navigate(typeof(Page2), tmp);

    }

Page2.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        var tmp = (Names)e.Parameter;

        lstNames2.ItemsSource = tmp;
    }
}

任何有关我如何执行此操作的指导都值得赞赏。

1 个答案:

答案 0 :(得分:0)

作为第二个参数传递的对象最终出现在NavigationEventArgs的ExtraData属性中。

private void btnAdd_Click(object sender, RoutedEventArgs e)
{
     var tmp = lstNames.SelectedItems.ToList();
     Frame.Navigate(typeof(Page2), tmp);
}

我在这里使用Linq作为ToList()。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    lstNames2.ItemsSource = e.ExtraData as List<Name>;
}

我还是建议您看一下MVVM。 我这样做的方法是首先称为viewmodel的方法。 我将使用contentcontrol而不是框架,并在其中使用usercontrol而不是页面。 我会使用模板将视图模型模板化成与页面等效的用户控件。

将列表传递到我“导航”到的视图模型的构造函数中。 这是一种标准的wpf技术,您应该可以轻松地使用Google。