none
请教一个WPF浏览器应用程序页面传值和跳转的问题 RRS feed

  • 问题

  • 我有两个页面 page1.xaml 和 page2.xaml

    page1.xaml上有一个button

    page2.xaml上有两个Lable

    想实现的操作是 当点击button的时候给page2.xaml传值 然后在page2.xaml中接受值,并做相应的处理,然后显示在lable上

    谢谢!

    2009年1月7日 0:40

答案

  • 请参考这篇文章里面给出的例子:

    http://msdn.microsoft.com/en-us/library/ms741843(VS.85).aspx

     

    你可以用Application.Current.Properties在整个程序范围内保存一些值,就像ASP.NET的Session对象一样。

     

    public partial class TaskPage : Page
    {
        ...
        void okButton_Click(object sender, RoutedEventArgs e)
        {
            // Accept task when Ok button is clicked
            TaskPageReturn(true);
        }

        void cancelButton_Click(object sender, RoutedEventArgs e)
        {
            // Cancel task
            TaskPageReturn(false);
        }

        void TaskPageReturn(bool taskResult)
        {
            Application.Current.Properties["TaskResult"] = taskResult;

            // Return to calling page
            this.NavigationService.GoBack();
        }
    }

    <Page ... Loaded="callingPage_Loaded">
      ...
    </Page>
    public partial class CallingPage : Page
    {
        ...
        void callingPage_Loaded(object sender, RoutedEventArgs e)
        {
            // If a task happened, get task result
            if (Application.Current.Properties["TaskResult"] == null) return;
            bool taskResult = (bool)Application.Current.Properties["TaskResult"];

            // Remove result and data
            Application.Current.Properties["TaskResult"] = null;
        }
        ...
    }

    2009年1月7日 6:38

全部回复

  •  

    你可以使用Application.Current.Properties
    2009年1月7日 4:15
  •  Killmyday 写:

     

    你可以使用Application.Current.Properties

     

    请教一下 如何使用啊?

     

    给个例子好吗?

    2009年1月7日 4:16
  • 你的场景是属于1or 2:

    1、是page1 page2 都已经显示出来,你只要点击button,把值传给page2 并且显示label。

    2、page1已经显示,点击button,把值传给page2 同时显示page2和对应label值。

    2009年1月7日 6:06
  • 我是想这样

    page1 的button 点击 然后给page2传值,同时 跳转到page2 显示  然后page2处理完了之后把值显示在label上

    就和asp.net 中 querystring["test"] 一样 怎么样实现这个。谢谢了

    2009年1月7日 6:10
  • 请参考这篇文章里面给出的例子:

    http://msdn.microsoft.com/en-us/library/ms741843(VS.85).aspx

     

    你可以用Application.Current.Properties在整个程序范围内保存一些值,就像ASP.NET的Session对象一样。

     

    public partial class TaskPage : Page
    {
        ...
        void okButton_Click(object sender, RoutedEventArgs e)
        {
            // Accept task when Ok button is clicked
            TaskPageReturn(true);
        }

        void cancelButton_Click(object sender, RoutedEventArgs e)
        {
            // Cancel task
            TaskPageReturn(false);
        }

        void TaskPageReturn(bool taskResult)
        {
            Application.Current.Properties["TaskResult"] = taskResult;

            // Return to calling page
            this.NavigationService.GoBack();
        }
    }

    <Page ... Loaded="callingPage_Loaded">
      ...
    </Page>
    public partial class CallingPage : Page
    {
        ...
        void callingPage_Loaded(object sender, RoutedEventArgs e)
        {
            // If a task happened, get task result
            if (Application.Current.Properties["TaskResult"] == null) return;
            bool taskResult = (bool)Application.Current.Properties["TaskResult"];

            // Remove result and data
            Application.Current.Properties["TaskResult"] = null;
        }
        ...
    }

    2009年1月7日 6:38
  •  

    谢谢 Killmyday 的回答 这个例子看明白了

    但是没有更好的办法了吗

    只有用类似session的方法保存值?

    没有类似于表单传值 或者querystring[] 传值的方法吗

    另外用 Application.Current.Properties  来传值 如果多个用户同时访问的话 这个值会不会混乱啊!

    忘解答!

    2009年1月7日 6:42
  • WPF程序是客户端程序,也就是说每个用户在自己的机器上启动的WPF程序,这些程序是互相独立的,因此不会出现多个用户同时访问的问题。

     

    表单传值和querystring[]传值的方法是因为ASP.NET背后的HTTP协议是无状态协议,因此需要在不同的页面之间(因为Web服务器不会记住各页面的状态)传递信息。 而WPF程序里面的各个page都是运行在同一个进程空间内,共享同一块内存,所以用Application.Current.Properties就可以了。

     

    实际上,你可以把你要处理的数据封装成自己的一个类,然后每个Page自己处理类的信息就可以了,有点像MVC模式。不知道上面的内容是否解答了你的问题?

    2009年1月7日 7:17
  •  

    啊 原来是这么回事啊 ,WPF浏览器应用程序其实是在客户端完成的计算啊,通过网页来访问是不是只是告诉.NET 该怎么样在客户端搭建应用程序啊,然后根据信息进行解析 最终生成我们看到的页面。

     

    至于传值的问题 你的方法我看明白了一些  比如说 我要处理用户登录的问题  page1 中有两个TextBox 用户名和密码

    然后点击确定的button的时候去验证 如果通过验证 我就想跳转到page2   然后自己做一个user 类 把用户名密码 放入user类中,然后加入到 Application.Current.Properties 中 在page2中去读取 Application.Current.Properties 中的数据 是这样吗?

    再次感谢您的回答 我是超级新手。。

    -_-!!

     

    2009年1月7日 7:29
  • 然后加入到 Application.Current.Properties 中 在page2中去读取 Application.Current.Properties 中的数据 是这样吗?

     

    对的。

    2009年1月7日 7:44
  • 非常感谢您的回答,可以加您的MSN吗? 以后有不懂的地方我还可以问您啊~

    我的MSN是 sunshine_prince@hotmail.com
    2009年1月7日 7:47
  •  

    yimin_shi@hotmail.com
    2009年1月8日 6:40
  • 说白了就是 页面间传值问题, 有三种方式:声明个全局变量,就是App.xaml里面声明;在所有窗体里面都可以引用 Application.Current.Properties["ArgumentName"];第二个就是 在目标窗体上面公开个属性,直接赋值;最后就是在Uri里面传参数 NavigationService.Navigate(window object,argument value);。
    2010年8月3日 2:44