【问题标题】:How to pass a parameter to another WPF page如何将参数传递给另一个 WPF 页面
【发布时间】:2013-09-30 06:58:20
【问题描述】:

如何将参数传递到另一个页面并在 WPF 中读取?我在互联网上读到,这可以使用以下 URL 来完成:

NavigationService n = NavigationService.GetNavigationService(this);
n.Navigate(new Uri("Test.xaml?param=true", UriKind.Relative));

但我无法读取Test.xaml 页面中的参数值。

我无法从页面实例化一个新实例并通过构造函数传递它,因为在往返使用页面路径导航之前我遇到了问题。

【问题讨论】:

    标签: .net wpf


    【解决方案1】:

    阅读:

    http://paulstovell.com/blog/wpf-navigation

    虽然不是很明显,但您可以将查询字符串数据传递给页面,并从路径中提取它。例如,您的超链接可以在 URI 中传递一个值:

    <TextBlock>
        <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink>
    </TextBlock>
    

    页面加载后,可以通过 NavigationService.CurrentSource 提取参数,返回一个 Uri 对象。然后它可以检查 Uri 以分离这些值。但是,我强烈建议不要使用这种方法,除非在最可怕的情况下。

    一个更好的方法是使用 NavigationService.Navigate 的重载,它接受一个对象作为参数。可以自己初始化对象,例如:

    Customer selectedCustomer = (Customer)listBox.SelectedItem;
    this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
    

    这假定页面构造函数接收一个客户对象作为参数。这使您可以在页面之间传递更丰富的信息,而无需解析字符串。

    【讨论】:

      【解决方案2】:

      您可以使用重载Navigate(object,object) 将数据传递给其他视图。

      这样称呼

      NavigationService n = NavigationService.GetNavigationService(this);
      n.Navigate(new Uri("Test.xaml", UriKind.Relative), true);
      

      在您的视图中,您可以提取 Navigation 传递的参数。

      void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)
      {
          bool test = (bool) e.ExtraData;
      }
      

      【讨论】:

      • 您能否详细说明如何在 Text.xaml 页面中注册 NavigationService_LoadCompleted 事件?它在 Test.xaml 构造函数中吗?还是在 Text.xaml 的 Loaded 事件中?还是其他方式?在第一种情况下,我得到一个 NullReferenceException(NavigationService 为空),在另一种情况下,NavigationService_LoadCompleted 永远不会被调用。
      • 我不明白这是如何工作的。 LoadCompleted 事件发生在调用 Navigate 方法的类中,而不是导航到的 View 中。很高兴错了,因为那太方便了。
      • 根据这个页面,看起来你应该重写 OnNavigatedTo(NavigationEventArgs e) 方法而不是处理 LoadCompleted 事件。但是,我还没有测试过这个。 developer.intersoftsolutions.com/display/ClientUI/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      相关资源
      最近更新 更多