我正在重新托管我的设计器并添加了一个工具箱项目,其中有一个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
您已回答了您自己的问题。如果你绑定到'ModelItem',你应该对它进行更新。如果您希望通过工作流设计师进行更改,那么这不仅适用于您的自定义设计人员,还适用于您的所有工作流程。 – Joao 2013-03-07 21:30:15
感谢您对@Jota的回复,并对延迟做出回应表示歉意。我明白,任何更改都必须通过ModelItem进行路由,以便设计师刷新。然而,就像当我将值设置为InArgument活动属性并且设计器刷新时无需通过ModelItem推送值一样,同样,当我将密钥添加到Collection活动属性时,不应通知设计人员。我不得不编写设计器代码隐藏来访问视图ModelItem,并将密钥添加到设计器刷新的集合中。虽然它起作用,但更多的是黑客。有什么建议么? – btsbee 2013-03-14 08:43:59
你可以直接改变你的活动,每次你改变一些东西时都要做一个'WorkflowDesigner.Load',但这是* hack方式*,它不会与你正在编辑的ModelItem同步。我不明白为什么通过代码隐藏访问ModelItem可能是一种破解。这是做到这一点的正确方法。即使在WPF-MVVM应用程序中,您也有时需要编写代码,这非常好。 – Joao 2013-03-14 11:04:56