1

我正在使用基本说明(此处)来创建由自定义 ToolPart 驱动的属性。

一切都很好,除了部分,为了访问 ApplyChanges 方法中的 webpart 属性,我必须将“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 部件配对。有没有更好的办法?我无法创建接口,因为无法在其中指定属性。

我在创建工具部件期间不恰当地尝试传递事件/事件处理程序,但是在调用时并没有更新 webpart 属性。

我可以为所有具有公共“文本”属性的 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]);
}

但这并没有给出编译时警告工具部件需要父 Web 部件来实现 IMyProperty 接口。

对此的简单解决方案是在 toolpart 构造函数中添加 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 回答