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

4

1 に答える 1

0

私のコメントの後に答えるだけです。

WorkflowDesignerを使用して編集しているときは、Activityそれ自体はありません。あなたが持っているのはModelItemです。

アクティビティをデザイナにロードした瞬間から、アクティビティがWorkflowDesigner.Load(activity)なくなってから、編集を開始するだけModelItemです。

XAMLにアクセスしてWorkflowDesigner.Text(フラッシュした後)、必要な操作を行うことができます。たとえば、ActivityBuilderまたはにロードしますが、それWorkflowServiceだけです。

Collection<Activities>設計者は、アクティビティに、Collection<Variable>またはその他のプロパティがあることを知りませんし、決して知りません。ModelItem彼らはそれが持っている特性と期間しか知りません。

ModelItem履歴書:設計者が拘束するものであるため、変更を加える必要があります。

于 2013-03-07T21:45:17.313 に答える