You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#结合Material Design实现页面间数据传递方案咨询

WPF C#结合Material Design页面导航的参数传递方案

1. 构造函数传参

这是最直接的传参方式,在目标页面的构造函数中定义参数,实例化页面时直接传入数据。

示例代码:

// 目标页面TargetPage.xaml.cs
public partial class TargetPage : Page
{
    public TargetPage(string transferMessage)
    {
        InitializeComponent();
        // 将参数绑定到页面控件
        InfoTextBlock.Text = transferMessage;
    }
}

导航时实例化页面并传入参数:

// 导航触发代码(比如主窗口或起始页面中)
var targetPage = new TargetPage("来自首页的传递内容");
// 结合Material Design的Transitioner控件替换当前内容
Transitioner.Content = targetPage;

2. 公共属性传参

如果不想修改构造函数,可以给目标页面添加公共属性,实例化页面后再赋值。

示例代码:

// 目标页面TargetPage.xaml.cs
public partial class TargetPage : Page
{
    public string TransferMessage { get; set; }

    public TargetPage()
    {
        InitializeComponent();
        // 页面加载后读取属性值
        Loaded += (s, e) => InfoTextBlock.Text = TransferMessage;
    }
}

导航时赋值并切换页面:

var targetPage = new TargetPage();
targetPage.TransferMessage = "通过公共属性传递的内容";
Transitioner.Content = targetPage;

3. MVVM模式下的ViewModel传参

如果项目采用MVVM架构,可以通过共享ViewModel实例来传递数据,这更符合Material Design的开发实践。

首先定义一个共享的ViewModel:

public class SharedDataViewModel : INotifyPropertyChanged
{
    private string _transferContent;
    public string TransferContent
    {
        get => _transferContent;
        set
        {
            _transferContent = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

起始页面的ViewModel中初始化该实例并赋值:

public class HomeViewModel
{
    public SharedDataViewModel SharedVm { get; } = new SharedDataViewModel();

    public void NavigateToTarget()
    {
        SharedVm.TransferContent = "通过共享ViewModel传递的内容";
        // 通过命令绑定通知视图执行导航操作
    }
}

目标页面绑定到该ViewModel:

<!-- TargetPage.xaml -->
<Page.DataContext>
    <local:SharedDataViewModel />
</Page.DataContext>
<TextBlock Text="{Binding TransferContent}" />

导航时确保目标页面的DataContext指向同一个ViewModel实例:

var targetPage = new TargetPage();
targetPage.DataContext = sharedViewModelInstance;
Transitioner.Content = targetPage;

4. 事件反向传参

如果需要从目标页面向起始页面传递数据,可以通过自定义事件实现。

目标页面定义事件:

public partial class TargetPage : Page
{
    public event EventHandler<string> DataReturned;

    private void BackButton_Click(object sender, RoutedEventArgs e)
    {
        // 触发事件传递返回数据
        DataReturned?.Invoke(this, "从目标页面返回的消息");
        // 导航回起始页面
        Transitioner.Content = new HomePage();
    }
}

导航时订阅事件:

var targetPage = new TargetPage();
targetPage.DataReturned += (s, returnedMessage) =>
{
    // 处理返回的数据
    MessageBox.Show(returnedMessage);
};
Transitioner.Content = targetPage;

内容的提问来源于stack exchange,提问作者user16906859

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:30:37