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
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.
Behandeln Sie in der InitializeType-Methode der ISharePointProjectItemTypeProvider-Implementierung das ProjectItemPropertiesRequested-Ereignis des projectItemTypeDefinition-Parameters.
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);
}
}
}
}
}
Grundlegendes 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.
Angeben 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
Definieren von benutzerdefinierten SharePoint-Projektelementtypen