2013-03-07 59 views
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应用程序一样工作。 任何帮助将不胜感激,因为我一直在尝试设计一种方式(使用多重绑定,使用事件等)从现在开始。

Cheerio, V

+0

您已回答了您自己的问题。如果你绑定到'ModelItem',你应该对它进行更新。如果您希望通过工作流设计师进行更改,那么这不仅适用于您的自定义设计人员,还适用于您的所有工作流程。 – Joao 2013-03-07 21:30:15

+0

感谢您对@Jota的回复,并对延迟做出回应表示歉意。我明白,任何更改都必须通过ModelItem进行路由,以便设计师刷新。然而,就像当我将值设置为InArgument活动属性并且设计器刷新时无需通过ModelItem推送值一样,同样,当我将密钥添加到Collection活动属性时,不应通知设计人员。我不得不编写设计器代码隐藏来访问视图ModelItem,并将密钥添加到设计器刷新的集合中。虽然它起作用,但更多的是黑客。有什么建议么? – btsbee 2013-03-14 08:43:59

+0

你可以直接改变你的活动,每次你改变一些东西时都要做一个'WorkflowDesigner.Load',但这是* hack方式*,它不会与你正在编辑的ModelItem同步。我不明白为什么通过代码隐藏访问ModelItem可能是一种破解。这是做到这一点的正确方法。即使在WPF-MVVM应用程序中,您也有时需要编写代码,这非常好。 – Joao 2013-03-14 11:04:56

回答

0

只是为了我的意见后回答。

当您通过WorkflowDesigner进行编辑时,本身没有Activity。你有什么是ModelItem

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

您可以通过WorkflowDesigner.Text(冲洗后)访问XAML,然后根据需要做任何事情。例如,将其加载到ActivityBuilderWorkflowService,但就是这样。

设计者不知道,也决不会认为该活动具有Collection<Activities>,Collection<Variable>或任何其他属性。他们只知道ModelItem及其具有的属性,期间。

恢复中:因为它是设计师所绑定的,所以必须修改为ModelItem