gpt4 book ai didi

wpf - 如何将 WorkflowDesigner 工作流定义数据绑定(bind)到 WPF 中的 MVVM View 模型

转载 作者:行者123 更新时间:2023-12-03 10:36:49 24 4
gpt4 key购买 nike

我正在尝试使用内置的数据绑定(bind)来加载工作流定义并将其保存到使用重新托管的工作流设计器类、WPF 和 MVVM 的数据库中。我的 xaml.cs 文件以编程方式创建工作流设计器并将 WorkflowDEsigner.View 设置为选项卡内容控件。

我正在寻找一种将工作流设计器的属性数据绑定(bind)到我的 View 模型对象的方法。这样,当用户创建工作流定义并点击保存时,我的 View 模型将(通过数据绑定(bind))具有工作流定义的字符串表示形式,以便可以将其保存到数据库中。并且当用户点击加载时,将从数据库中查询工作流定义,并水合到 MVVM 对象中,然后将数据绑定(bind)到工作流设计器进行显示。

在调用 WorkflowDesigner.Save() 将定义保存到文件之前,不会填充 WorkflowDesigner.Text 属性。我绝对不想那样做。

目前,我正在通过 Hook WorkflowDesigner.ModelChanged 事件并在该事件处理程序中自行获取文本,然后手动设置 View 模型。有没有一种纯粹的数据绑定(bind)方式来实现这一点?

//设计器初始化

  m_objWFWorkerDesigner = new WorkflowDesigner();
m_objWFWorkerDesigner.Context.Services.GetService<DesignerConfigurationService>().AnnotationEnabled = true;
m_objWFWorkerDesigner.Context.Services.GetService<DesignerConfigurationService>().TargetFrameworkName = new
System.Runtime.Versioning.FrameworkName(".NET Framework", new Version(4, 5));
m_objWFWorkerDesigner.Load(new System.Activities.ActivityBuilder());
m_objWFWorkerDesigner.ModelChanged += m_objWFWorkerDesigner_ModelChanged;


void m_objWFWorkerDesigner_ModelChanged(object sender, EventArgs e)
{
((RehostedWorkflowDesignerVM)this.DataContext).WorkerWorkflow = GetActivityString(sender);
}

private static string GetActivityString(object sender)
{
ActivityBuilder activityBuilder = (ActivityBuilder)((WorkflowDesigner)sender).Context.Services.GetService<ModelTreeManager>().Root.GetCurrentValue();
StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
XamlWriter xw = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(tw, new XamlSchemaContext()));
XamlServices.Save(xw, activityBuilder);
return sb.ToString();
}

最佳答案

WorkflowDesigner及其周围的控件(工具箱、属性编辑器等)对 MVVM 不友好,因此您将无法以正确的方式将数据绑定(bind)到它们。

我在 FlowStudio 中所做的事情是将这些控件封装在真正的 WPF 控件中,该控件使用依赖项属性通过 XAML 启用数据绑定(bind)。

我已经开始对 ToolboxControl 做这件事了。您可以查看here .

关于wpf - 如何将 WorkflowDesigner 工作流定义数据绑定(bind)到 WPF 中的 MVVM View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com