0

私はWPFで作業しています。次の問題があります。新しいアクティビティをデザイナーにドロップしたとき、いくつかの情報をハッシュテーブルに保存する必要があります。このハッシュテーブルは、次の構造である必要があります。

キー: ACTIVITY OBJECT DROPPED VALUE: このアクティビティが実行時に作成する変数のリスト。

現在、Window クラスに次のコードがあります。

 private void AddDesigner()
 {
     this.wd = new WorkflowDesigner();
     ------------------------
     ModelService ms = wd.Context.Services.GetService<ModelService>();
     if (ms != null)
            ms.ModelChanged += new EventHandler<ModelChangedEventArgs>(ms_ModelChanged);
 }

および ms_ModelChanged:

 void ms_ModelChanged(object sender, ModelChangedEventArgs e)
 {
        if (e.ItemsAdded != null)
        {
            ModelItem item = e.ItemsAdded.FirstOrDefault<ModelItem>();
            var test = item.GetCurrentValue() as CountActivity;
            RulesDll.ObjectsClass.HashTableActivity.HashActivity.Add(XXXX, lista);
        }

        else if (e.ItemsRemoved != null)
        {
            ModelItem item = e.ItemsRemoved.FirstOrDefault<ModelItem>();
            //mi.Properties["Variables"].Collection.Remove(n);
        }
    }

In: RulesDll.ObjectsClass.HashTableActivity.HashActivity.Add(XXXX, lista);

XXXX は、デザイナーにドロップされたオブジェクト項目である必要があります..OK、私が知っているように、ハッシュテーブルに重複キーを追加することは不可能です.si 次のコードを使用してデザイナーに 2 つの同じアクティビティをドロップすると:

RulesDll.ObjectsClass.HashTableActivity.HashActivity.Add(item, lista);

NOT DUPLICATED 値は通常どおりハッシュテーブルで許可されるというエラー....

では、デザイナーにドロップしたアクティビティを特定するにはどうすればよいでしょうか?

4

1 に答える 1

0

現在のアクティビティオブジェクトをキーとして使用できないのはなぜですか?

hashtable.Add(item.GetCurrentValue(), ...);

とにかく、ほぼ確実に、HashtableはSystem.Object.GetHashCode()内部的に使用しており、衝突は起こりにくいものの、「異なるオブジェクトの一意の戻り値を保証するものではありません」。

ワークフローの設計時には、ある種のアクティビティの一意のIDにアクセスできません。あなたはあなた自身です。私が言ったように、私はあなたが何をしようとしているのか分かりませんが、それは良く聞こえません!

于 2012-09-10T17:43:08.277 に答える