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

Revit宏开发场景下如何将主应用数据传递到WPF窗体Code Behind

问题原因与解决方案

直接修复现有报错

你代码中静态变量访问语法错误:mycomment是ThisApplication类的静态成员,不属于WPF2021Test命名空间的直接成员,所以将报错行修改为如下内容即可正常运行:

Person person = new Person { Name = WPF2021Test.ThisApplication.mycomment, Age = 26 };

更推荐的实现方案(解耦、易维护)

使用构造函数传参代替静态变量传递数据,避免静态变量全局共享带来的多场景数据冲突问题,同时方便后续业务逻辑拆分、多窗体复用:

1. 修改主应用的窗体调用逻辑

在实例化WPF窗体时将需要传递的数据作为参数传入,支持传递Revit文档对象、自定义业务类等任意类型数据:

public void Tutorial1()
{
    UIDocument uidoc = this.ActiveUIDocument;
    Document doc = this.ActiveUIDocument.Document;
    View pview = uidoc.ActiveView;
    // 此处可根据需求传入任意需要的参数
    Window2 win2 = new Window2(mycomment, doc); 
    win2.Show();
}

2. 修改WPF窗体的构造函数

新增带参构造函数接收传入的数据:

public partial class Window2 : Window 
{
    Person person;
    // 可根据需求扩展参数列表
    public Window2(string comment, Document revitDoc = null)
    {
        InitializeComponent();
        person = new Person { Name = comment, Age = 26 };
        this.DataContext = person;
        // 后续可直接使用传入的revitDoc对象操作Revit文档,无需依赖静态变量
    }
    // 其余原有代码保持不变
}

扩展优化方向

如果需要彻底分离业务逻辑和界面代码,可引入MVVM模式:将Person类改造为实现了INotifyPropertyChanged接口的ViewModel层,所有业务逻辑都封装在ViewModel中,窗体仅负责界面展示和用户交互,后续新增其他窗体时可直接复用ViewModel的逻辑,无需重复编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:04