0

我正在重新托管我的设计师并添加了一个工具箱项,其中包含一个 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 应用程序一样工作。任何帮助将不胜感激,因为我从现在开始一直在尝试设计一种方法(使用多重绑定,使用事件等)。

切里奥,V

4

1 回答 1

0

只是在我的评论后回答。

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

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

您可以通过(刷新后)访问 XAMLWorkflowDesigner.Text并使用它做任何您想做的事情。例如将它加载到一个ActivityBuilderWorkflowService但就是这样。

设计者不知道,也永远不会知道活动具有Collection<Activities>Collection<Variable>任何其他属性。他们只知道ModelItem它的属性和属性。

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

于 2013-03-07T21:45:17.313 回答