Freigeben über


Vorgehensweise: Hinzufügen einer Eigenschaft zu einem benutzerdefinierten SharePoint-Projektelementtyp

Wenn Sie einen benutzerdefinierten SharePoint-Projektelementtyp definieren, können Sie dem Projektelement eine Eigenschaft hinzufügen.Diese Eigenschaft wird im Eigenschaftenfenster angezeigt, wenn Sie das Projektelement im Projektmappen-Explorer auswählen.

Im Folgenden wird angenommen, dass bereits ein eigener SharePoint-Projektelementtyp definiert wurde.Weitere Informationen finden Sie unter Gewusst wie: Definieren eines SharePoint-Projektelementtyps.

So fügen Sie einer Definition eines Projektelementtyps eine Eigenschaft hinzu

  1. Definieren Sie eine Klasse mit einer öffentlichen Eigenschaft, die der Eigenschaft entspricht, die Sie dem benutzerdefinierten Projektelementtyp hinzufügen.Wenn Sie einem benutzerdefinierten Projektelementtyp mehrere Eigenschaften hinzufügen möchten, können Sie alle Eigenschaften in der gleichen Klasse oder in anderen Klassen definieren.

  2. Behandeln Sie in der InitializeType-Methode der ISharePointProjectItemTypeProvider-Implementierung das ProjectItemPropertiesRequested-Ereignis des projectItemTypeDefinition-Parameters.

  3. Fügen Sie im Ereignishandler für das ProjectItemPropertiesRequested-Ereignis der PropertySources-Auflistung des Ereignisargumentparameters eine Instanz der benutzerdefinierten Eigenschaftenklasse hinzu.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie Sie einem benutzerdefinierten Projektelementtyp eine Eigenschaft mit dem Namen Example Property hinzufügen.

Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio.SharePoint

Namespace Contoso.Examples.ProjectItemTypeWithProperty

    <Export(GetType(ISharePointProjectItemTypeProvider))> _
    <SharePointProjectItemType("Contoso.ExampleProjectItemType")> _
    <SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")> _
    Friend Class ExampleProjectItemTypeWithProperty
        Implements ISharePointProjectItemTypeProvider

        Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _
            Implements ISharePointProjectItemTypeProvider.InitializeType
            projectItemTypeDefinition.Name = "ExampleProjectItemType"
            projectItemTypeDefinition.SupportedDeploymentScopes = _
                SupportedDeploymentScopes.Site Or SupportedDeploymentScopes.Web
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All

            AddHandler projectItemTypeDefinition.ProjectItemPropertiesRequested, AddressOf ProjectItemPropertiesRequested
        End Sub

        Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
            ByVal e As SharePointProjectItemPropertiesRequestedEventArgs)
            Dim propertyObject As CustomProperties = Nothing

            ' If the properties object already exists, get it from the project item's annotations.
            If False = e.ProjectItem.Annotations.TryGetValue(propertyObject) Then
                ' Otherwise, create a new properties object and add it to the annotations.
                propertyObject = New CustomProperties(e.ProjectItem)
                e.ProjectItem.Annotations.Add(propertyObject)
            End If
            e.PropertySources.Add(propertyObject)
        End Sub
    End Class

    Friend Class CustomProperties
        Private projectItem As ISharePointProjectItem

        Friend Sub New(ByVal projectItem As ISharePointProjectItem)
            Me.projectItem = projectItem
        End Sub

        Private Const TestPropertyId As String = "Contoso.ExampleProperty"
        Private Const PropertyDefaultValue As String = "This is an example property."

        <DisplayName("Example Property")> _
        <DescriptionAttribute("This is an example property for project items.")> _
        <DefaultValue(PropertyDefaultValue)> _
        Public Property ExampleProperty As String
            Get
                Dim propertyValue As String = Nothing

                ' Get the current property value if it already exists; otherwise, return a default value.
                If False = projectItem.ExtensionData.TryGetValue(TestPropertyId, propertyValue) Then
                    propertyValue = PropertyDefaultValue
                End If
                Return propertyValue
            End Get
            Set(ByVal value As String)
                If value <> PropertyDefaultValue Then
                    ' Store the property value in the ExtensionData property of the project item.
                    ' Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData(TestPropertyId) = value
                Else
                    ' Do not save the default value.
                    projectItem.ExtensionData.Remove(TestPropertyId)
                End If
            End Set
        End Property
    End Class
End Namespace
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;

namespace Contoso.Examples.ProjectItemTypeWithProperty
{
    [Export(typeof(ISharePointProjectItemTypeProvider))]
    [SharePointProjectItemType("Contoso.ExampleProjectItemType")]
    [SharePointProjectItemIcon("ExampleProjectItemType.ProjectItemIcon.ico")]
    internal class ExampleProjectItemTypeWithProperty : ISharePointProjectItemTypeProvider
    {
        public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
        {
            projectItemTypeDefinition.Name = "ExampleProjectItemType";
            projectItemTypeDefinition.SupportedDeploymentScopes =
                SupportedDeploymentScopes.Site | SupportedDeploymentScopes.Web;
            projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All;

            projectItemTypeDefinition.ProjectItemPropertiesRequested += 
                projectItemTypeDefinition_ProjectItemPropertiesRequested;
        }

        void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender, 
            SharePointProjectItemPropertiesRequestedEventArgs e)
        {
            CustomProperties property;

            // If the properties object already exists, get it from the project item's annotations.
            if (!e.ProjectItem.Annotations.TryGetValue(out property))
            {
                // Otherwise, create a new properties object and add it to the annotations.
                property = new CustomProperties(e.ProjectItem);
                e.ProjectItem.Annotations.Add(property);
            }

            e.PropertySources.Add(property);
        }
    }

    internal class CustomProperties
    {
        private ISharePointProjectItem projectItem;

        internal CustomProperties(ISharePointProjectItem projectItem)
        {
            this.projectItem = projectItem;
        }

        private const string PropertyId = "Contoso.ExampleProperty";
        private const string PropertyDefaultValue = "This is an example property.";

        [DisplayName("Example Property")]
        [DescriptionAttribute("This is an example property for project items.")]
        [DefaultValue(PropertyDefaultValue)]
        public string ExampleProperty
        {
            get
            {
                string propertyValue;

                // Get the current property value if it already exists; otherwise, return a default value.
                if (!projectItem.ExtensionData.TryGetValue(PropertyId, out propertyValue))
                {
                    propertyValue = PropertyDefaultValue;
                }
                return propertyValue;
            }
            set
            {
                if (value != PropertyDefaultValue)
                {
                    // Store the property value in the ExtensionData property of the project item. 
                    // Data in the ExtensionData property persists when the project is closed.
                    projectItem.ExtensionData[PropertyId] = value;
                }
                else
                {
                    // Do not save the default value.
                    projectItem.ExtensionData.Remove(PropertyId);
                }
            }
        }
    }
}

Ee791683.collapse_all(de-de,VS.110).gifGrundlegendes zum Code

Damit stets die gleiche Instanz der CustomProperties-Klasse beim ProjectItemPropertiesRequested-Ereignis verwendet wird, wird im folgenden Codebeispiel das Eigenschaftenobjekt in der Annotations-Eigenschaft des Projektelements gespeichert, sobald das Ereignis zum ersten Mal auftritt.Vom Code wird dann jedes Mal, wenn das Ereignis auftritt, dieses Objekt abgerufen.Weitere Informationen zur Verwendung der Annotations-Eigenschaft zum Speichern von Daten mit Projektelementen finden Sie unter Zuordnen von benutzerdefinierten Daten zu SharePoint-Tools-Erweiterungen.

Um die Änderungen des Eigenschaftswerts permanent zu speichern, speichert der set-Accessor für ExampleProperty den neuen Wert in der ExtensionData-Eigenschaft des ISharePointProjectItem-Objekts, dem die Eigenschaft zugewiesen ist.Weitere Informationen zur Verwendung der ExtensionData-Eigenschaft zum Speichern von Daten mit Projektelementen finden Sie unter Speichern von Daten in Erweiterungen des SharePoint-Projektsystems.

Ee791683.collapse_all(de-de,VS.110).gifAngeben des Verhaltens benutzerdefinierter Eigenschaften

Sie können definieren, wie eine benutzerdefinierte Eigenschaft angezeigt wird und sich im Eigenschaftenfenster verhält, indem Sie Attribute aus dem System.ComponentModel-Namespace auf die Eigenschaftendefinition anwenden.Die folgenden Attribute sind in vielen Szenarien hilfreich:

  • DisplayNameAttribute: Gibt den Namen der Eigenschaft an, die im Eigenschaftenfenster angezeigt wird.

  • DescriptionAttribute: Gibt die Beschreibungszeichenfolge an, die bei Auswahl der Eigenschaft unten im Eigenschaftenfenster angezeigt wird.

  • DefaultValueAttribute: Gibt den Standardwert für die Eigenschaft an.

  • TypeConverterAttribute: Gibt eine benutzerdefinierte Konvertierung zwischen der Zeichenfolge, die im Eigenschaftenfenster angezeigt wird, und einem Eigenschaftswert an, der keine Zeichenfolge ist.

  • EditorAttribute: Gibt einen benutzerdefinierten Editor zum Ändern der Eigenschaft an.

Kompilieren des Codes

Für diese Codebeispiele ist ein Klassenbibliotheksprojekt mit Verweisen auf die folgenden Assemblys erforderlich:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Bereitstellen des Projektelements

Um Ihr Projektelement anderen Entwicklern zur Verfügung zu stellen, können Sie eine Projektvorlage oder eine Projektelementvorlage erstellen.Weitere Informationen finden Sie unter Erstellen von Elementvorlagen und Projektvorlagen für SharePoint-Projektelemente.

Erstellen Sie zum Bereitstellen des Projektelements ein Visual Studio-Erweiterungspaket (VSIX) für die Assembly, die Vorlage und alle weiteren Dateien, die Sie mit dem Projektelement verteilen möchten.Weitere Informationen erhalten Sie unter Bereitstellen von Erweiterungen für die SharePoint-Tools in Visual Studio.

Siehe auch

Konzepte

Gewusst wie: Definieren eines SharePoint-Projektelementtyps

Vorgehensweise: Hinzufügen eines Kontextmenüelements zu einem benutzerdefinierten SharePoint-Projektelementtyp

Definieren von benutzerdefinierten SharePoint-Projektelementtypen