1

カスタム ToolPart によって駆動されるプロパティを作成するための基本的な手順 (ここ) を使用しています。

ApplyChanges メソッド内の Web パーツ プロパティにアクセスするために、「this.ParentToolPane.SelectedWebPart」を具体的な「SimpleWebPart」クラスにキャストする必要がある部分を除いて、すべて問題ありません。

public override void ApplyChanges()
{
    SimpleWebPart wp1 = (SimpleWebPart)this.ParentToolPane.SelectedWebPart;

// Send the custom text to the Web Part.
    wp1.Text = Page.Request.Form[inputname];
}

これを行うには、各ツールパーツを特定の Web パーツとペアにする必要があります。より良い方法はありますか?プロパティを指定する方法がないため、インターフェイスを作成できません。

ツールパーツの作成中にイベント/イベントハンドラーを渡そうとしましたが、呼び出されたときに Web パーツのプロパティが更新されませんでした。

パブリックな "Text" プロパティを持つすべての Web パーツの基本クラスを作成できますが、それは厄介です。

また、必死になって、リフレクションを使用して this.ParentToolPane.SelectedWebPart 参照を開き、「Text」という名前のプロパティをそのように呼び出すこともできます。

いずれにせよ、私は各オプションが行き止まりであることを知るためだけに、かなりのばかげたバレルを見下ろしています.

再利用可能なツールパーツを作成するための正しい方法を推奨できる人はいますか?

4

1 に答える 1

0

Web パーツの特定のインスタンスではなく、インターフェイスを使用しました。

private class IMyProperty
{
    void SetMyProperty(string value);
}

public override void ApplyChanges()
{
    IMyProperty wp1 = (IMyProperty)this.ParentToolPane.SelectedWebPart;

    // Send the custom text to the Web Part.
    wp1.SetMyProperty(Page.Request.Form[inputname]);
}

ただし、これは、ツールパーツが IMyProperty インターフェイスを実装するために親 Web パーツを必要とするというコンパイル時の警告を出しません。

これに対する簡単な解決策は、ツールパーツ コンストラクターに IMyProperty インターフェイスのプロパティを追加し、this.ParentToolPane.SelectedWebPart プロパティの代わりにこの参照を呼び出すことです。

public ToolPart1(IContentUrl webPart)
{
    // Set default properties              
    this.Init += new EventHandler(ToolPart1_Init);
    parentWebPart = webPart;
}

public override void ApplyChanges()
{
    // Send the custom text to the Web Part.
    parentWebPart.SetMyProperty(Page.Request.Form[inputname]);
}

public override ToolPart[] GetToolParts()
{
    // This is the custom ToolPart.
    toolparts[2] = new ToolPart1(this);
    return toolparts;
}

これは問題なく動作しますが、基盤となる SharePoint コードに問題があり、後でつまずく可能性があるという感覚を克服できません。

于 2011-12-01T20:28:56.157 に答える