将项添加到集合不会刷新活动设计器

时间:2013-03-07 13:47:52

标签: workflow-foundation-4 activitydesigner

重新托管我的设计器,并添加了一个工具箱项,其中包含一个WorkflowItemsPresenter来呈现多个子活动项。所以我的模型项目有一个集合:

    Sequence _innerSequence = new Sequence();
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Browsable(false)]
    [Description("")]
    public Collection<Activity> Activities { get { return _innerSequence.Activities; } }

,绑定是

    <sap:WorkflowItemsPresenter Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Items="{Binding Path=ModelItem.Activities}" VerticalAlignment="Center" HorizontalAlignment="Center" HintText="Drop activities here">
    <sap:WorkflowItemsPresenter.SpacerTemplate>
            <DataTemplate>
                <Label HorizontalAlignment="Center" Height="21"/>                    
            </DataTemplate>
        </sap:WorkflowItemsPresenter.SpacerTemplate>
    </sap:WorkflowItemsPresenter>

加载设计器时绑定工作正常。现在,我想在设计器上更新某些过滤器时清除并向此集合添加新项目。因此,在此过滤器属性的set访问器中,我调用了一个执行以下操作的方法:

    private void RefreshApplication()
    {
        Activities.Clear();
        Activities.Add(new AddXYZApplication() { ApplicationName = "Test" });
    }

虽然集合得到更新,但设计师不会刷新。我知道有一种方法可以通过编写一些设计器代码隐藏(即通过模型项树来更新集合)来实现这一点,但我理想的是没有代码隐藏,并期望它像任何其他WPF应用程序一样工作。 任何帮助都会非常感激,因为我一直试图设计一种方法(使用多重绑定,使用事件等)。

Cheerio, V

1 个答案:

答案 0 :(得分:0)

在我发表评论后回答。

当您通过WorkflowDesigner进行编辑时,您本身没有Activity。你拥有的是一个ModelItem

从您将活动加载到设计器的那一刻起,通过WorkflowDesigner.Load(activity)您再也没有活动,您只需开始编辑ModelItem

您可以通过WorkflowDesigner.Text(在刷新之后)访问XAML并随意执行任何操作。例如,将其加载到ActivityBuilderWorkflowService,但就是这样。

设计人员不知道,也绝不会知道这些活动有Collection<Activities>Collection<Variable>或任何其他属性。他们只知道ModelItem及其拥有的属性,期限。

简历中:必须对ModelItem进行更改,因为这是设计师绑定的内容。