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
相关产品推荐
相关产品推荐

