Gewusst wie: Hinzufügen einer Eigenschaft zu einer SharePoint-Projektelementerweiterung
Sie können eine Projektelementerweiterung verwenden, wenn Sie einem bereits in Visual Studio installierten SharePoint-Projektelement eine Eigenschaft hinzufügen möchten. Diese Eigenschaft wird im Eigenschaftenfenster angezeigt, wenn Sie das Projektelement im Projektmappen-Explorer auswählen.
Im Folgenden wird angenommen, dass bereits eine Projektelementerweiterung erstellt wurde. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer SharePoint-Projektelementerweiterung.
So fügen Sie einer Projektelementerweiterung eine Eigenschaft hinzu
Definieren Sie eine Klasse mit einer öffentlichen Eigenschaft, die die dem Projektelementtyp hinzuzufügende Eigenschaft darstellt. Wenn Sie einem Projektelementtyp mehrere Eigenschaften hinzufügen möchten, können Sie alle Eigenschaften in der gleichen Klasse oder in unterschiedlichen Klassen definieren.
Behandeln Sie in der Initialize-Methode der ISharePointProjectItemTypeExtension-Implementierung das ProjectItemPropertiesRequested-Ereignis des projectItemType-Parameters.
Fügen Sie im Ereignishandler für das ProjectItemPropertiesRequested-Ereignis der PropertySources-Auflistung des Ereignisargumentparameters eine Instanz der Eigenschaftenklasse hinzu.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie Sie einem Projektelement vom Typ "Ereignisempfänger" 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.ProjectItemExtensionWithProperty
<Export(GetType(ISharePointProjectItemTypeExtension))> _
<SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")> _
Friend Class ExampleProjectItemExtensionWithProperty
Implements ISharePointProjectItemTypeExtension
Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _
Implements ISharePointProjectItemTypeExtension.Initialize
AddHandler projectItemType.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.ProjectItemExtensionWithProperty
{
[Export(typeof(ISharePointProjectItemTypeExtension))]
[SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.EventHandler")]
internal class ExampleProjectItemExtensionWithProperty : ISharePointProjectItemTypeExtension
{
public void Initialize(ISharePointProjectItemType projectItemType)
{
projectItemType.ProjectItemPropertiesRequested +=
projectItemType_ProjectItemPropertiesRequested;
}
void projectItemType_ProjectItemPropertiesRequested(object sender,
SharePointProjectItemPropertiesRequestedEventArgs e)
{
CustomProperties propertyObject;
// If the properties object already exists, get it from the project item's annotations.
if (!e.ProjectItem.Annotations.TryGetValue(out propertyObject))
{
// Otherwise, create a new properties object and add it to the annotations.
propertyObject = new CustomProperties(e.ProjectItem);
e.ProjectItem.Annotations.Add(propertyObject);
}
e.PropertySources.Add(propertyObject);
}
}
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 Zuordnen von Daten zu 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 Beispiele ist ein Klassenbibliotheksprojekt mit Verweisen auf die folgenden Assemblys erforderlich:
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
Bereitstellen der Erweiterung
Erstellen Sie ein Visual Studio-Erweiterungspaket (VSIX) für die Assembly und alle weiteren Dateien, die Sie mit der Erweiterung verteilen möchten, um die Erweiterung bereitzustellen. Weitere Informationen finden Sie unter Bereitstellen von Erweiterungen für die SharePoint-Tools in Visual Studio.
Siehe auch
Aufgaben
Gewusst wie: Erstellen einer SharePoint-Projektelementerweiterung
Exemplarische Vorgehensweise: Erweitern eines SharePoint-Elementtyps
Weitere Ressourcen
Gewusst wie: Hinzufügen eines Kontextmenüelements zu einer SharePoint-Projektelementerweiterung