重新托管我的设计器,并添加了一个工具箱项,其中包含一个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
答案 0 :(得分:0)
在我发表评论后回答。
当您通过WorkflowDesigner进行编辑时,您本身没有Activity
。你拥有的是一个ModelItem 。
从您将活动加载到设计器的那一刻起,通过WorkflowDesigner.Load(activity)
您再也没有活动,您只需开始编辑ModelItem
。
您可以通过WorkflowDesigner.Text
(在刷新之后)访问XAML并随意执行任何操作。例如,将其加载到ActivityBuilder
或WorkflowService
,但就是这样。
设计人员不知道,也绝不会知道这些活动有Collection<Activities>
,Collection<Variable>
或任何其他属性。他们只知道ModelItem
及其拥有的属性,期限。
简历中:必须对ModelItem
进行更改,因为这是设计师绑定的内容。