天天看点

WF4设计器模型:编辑范围ModelEditingScope

上面说到在WF4的设计器中选中某些活动要进行设计工作时,就形成了可编辑的对象,该对象对应于ModelEditingScope类表示对编辑存储区的一组更改。更改组是事务性的。可以将在一个编辑范围内所做的更改作为一个单元提交或中止。该类主要有下面几个方法:

下面举一个例子来说明:

1.我们使用WPF来重新宿主WF4的设计器,完成后如下图:

<a href="http://images.cnblogs.com/cnblogs_com/carysun/WindowsLiveWriter/WF4ModelEditingScope_13C7F/clip_image002_2.jpg"></a>

对应的XAML如下:

&lt;Window x:Class="CaryEditingScope.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="500" Width="700"&gt;

    &lt;Grid Name="CaryGrid" &gt;

        &lt;Grid.ColumnDefinitions&gt;

            &lt;ColumnDefinition Width="2*"/&gt;

            &lt;ColumnDefinition Width="7*"/&gt;

            &lt;ColumnDefinition Width="3*"/&gt;

        &lt;/Grid.ColumnDefinitions&gt;

        &lt;StackPanel Grid.Column="0"&gt;

            &lt;Button Name="Open" Content="打开" Click="Open_Click"&gt;&lt;/Button&gt;

            &lt;Button Name="Close" Content="关闭" Click="Close_Click"&gt;&lt;/Button&gt;

            &lt;Button Name="Revert" Content="放弃" Click="Revert_Click"&gt;&lt;/Button&gt;           

        &lt;/StackPanel&gt;

    &lt;/Grid&gt;

&lt;/Window&gt;

2.我们来介绍下这个程序,程序运行的时候我们会重新宿主WF的设计器,并默认添加两个活动。在点击打开按钮的时候我们会对ModelItem进行更改在添加两个活动,这个时候你不会看到设计器的变化,只有在点击关闭按钮后提交了编辑范围的更改后你会看见设计器上又新增了两个活动。放弃按钮为你在完成编辑范围前放弃更改,后台代码如下:

namespace CaryEditingScope

{

    /// &lt;summary&gt;

    /// Interaction logic for MainWindow.xaml

    /// &lt;/summary&gt;

    public partial class MainWindow : Window

    {

        WorkflowDesigner workflowDesigner;

        ModelEditingScope mEditScope;

        public MainWindow()

        {

            InitializeComponent();         

            workflowDesigner = new WorkflowDesigner();

            this.DataContext = this;

            (new DesignerMetadata()).Register();

            workflowDesigner.Load(new Sequence

            {

                Activities =

                            {                            

                                new WriteLine { Text = "工作流设计器" },

                                new Flowchart()

                            }

            });

            Grid.SetColumn(workflowDesigner.View, 1);

            Grid.SetColumn(workflowDesigner.PropertyInspectorView, 2);

            CaryGrid.Children.Add(workflowDesigner.View);

            CaryGrid.Children.Add(workflowDesigner.PropertyInspectorView);

        }

        private void Open_Click(object sender, RoutedEventArgs e)

            ModelItem mi = workflowDesigner.Context.Services.GetService&lt;ModelService&gt;().Root;           

            mEditScope= mi.BeginEdit();

            mi.Properties["Activities"].Collection.Add(new WriteLine { Text = "这是新增加的部分?" });           

            mi.Properties["Activities"].Collection.Add(new Flowchart());

        private void Close_Click(object sender, RoutedEventArgs e)

            mEditScope.Complete();

            Revert.IsEnabled = false;

        private void Revert_Click(object sender, RoutedEventArgs e)

            mEditScope.Revert();

            Close.IsEnabled = false;

    }

}

3.运行后效果如下:

<a href="http://images.cnblogs.com/cnblogs_com/carysun/WindowsLiveWriter/WF4ModelEditingScope_13C7F/clip_image002%5B14%5D.jpg"></a>

本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/11/27/ModelEditingScope.html,如需转载请自行联系原作者