c# - 在页面之间传递数据 C# WPF

标签 c# wpf string xaml binding

我正在尝试在页面之间传递一个简单的字符串,但我不知道该怎么做。

我创建了一个测试应用程序,我在其中单击了一个按钮,“a”的值将传递到下一页 (Page1.xaml.cs)

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        string a = "hello";

        Page2 p2 = new Page2();
        NavigationService.Navigate(p2, a);
    }

现在,我想从 Page1 (Page2.xaml.cs) 中提取数据

    private void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)
    {
        string str = (string)e.ExtraData;
    }

然后在构造函数(Page2.xaml.cs)中订阅

    public Page2()
    {
        InitializeComponent();
        NavigationService.LoadCompleted += NavigationService_LoadCompleted;
    }

但是当我运行程序时出现错误。有人可以指出我错过了什么吗?

最佳答案

没有好的Minimal, Complete, and Verifiable code example ,不可能确定解决您的问题所需的一切。但是,如果您要问的只是在导航时如何允许数据从一页传递到下一页,在我看来 NavigationService.Navigate(object, object) overload 对你很有用。

第二个参数是你要传递的数据。目标页面可以处理 NavigationService.LoadCompleted事件(或您喜欢的任何其他合适的事件),其中可以通过 NavigationEventArgs.ExtraData 检索传递给 Navigate() 方法的对象值属性(property)。

例如,在您的第一页中:

private void button_Click(object sender, RoutedEventArgs e)
{
    Page2 p2 = new Page2();
    NavigationService.Navigate(p2, v.str);
}

然后在你的第二页:

private void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)
{
    string str = (string)e.ExtraData;

    // do whatever with str, like assign to a view model field, etc.
}

当然,您将订阅事件处理程序,例如在页面的构造函数或 XAML 中。例如:

public partial class Page2 : Page
{
    public Page2()
    {
        InitializeComponent();

        NavigationService.LoadCompleted += NavigationService_LoadCompleted;
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        NavigationService.GoBack();
    }

    private void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)
    {
        string str = (string)e.ExtraData;

        // do whatever with str, like assign to a view model field, etc.
    }
}

关于c# - 在页面之间传递数据 C# WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260018/

相关文章:

r - R : remove specific pattern in multiple places without removing text in between instances of the pattern 中的字符串操作

java - 如何删除大的 if-else-if 链

c# - Dictionary<string, List<IRp>> 问题,覆盖数据

c# - 当文本框的背景在 wpf 中为灰色时插入符消失

c++ - libssh2 - 使用 SFTP 读取文件

wpf - 如何创建一个像这样的自定义 WPF 窗口?

WPF 上下文菜单和 ListView

c# - 这些获取 DTE2 的方法有什么区别(Visual Studio 2013)

c# - 为什么 roslyn 对于未签名的引用给出警告 CS8002 而不是错误 CS1577?

javascript - C#.net 相当于 JS .on()