IPropertySet Интерфейс

Определение

Представляет коллекцию пар "ключ-значение", коррелируя несколько других интерфейсов коллекции.

public interface class IPropertySet : IIterable<IKeyValuePair<Platform::String ^, Platform::Object ^> ^>, IMap<Platform::String ^, Platform::Object ^>, IObservableMap<Platform::String ^, Platform::Object ^>
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2319707551, 62694, 17441, 172, 249, 29, 171, 41, 134, 130, 12)]
/// [Windows.Foundation.Metadata.HasVariant]
struct IPropertySet : IIterable<IKeyValuePair<winrt::hstring, IInspectable const&>>, IMap<winrt::hstring, IInspectable const&>, IObservableMap<winrt::hstring, IInspectable const&>
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2319707551, 62694, 17441, 172, 249, 29, 171, 41, 134, 130, 12)]
[Windows.Foundation.Metadata.HasVariant]
public interface IPropertySet : IDictionary<string,object>, IEnumerable<KeyValuePair<string,object>>, IObservableMap<string,object>
Public Interface IPropertySet
Implements IDictionary(Of String, Object), IEnumerable(Of KeyValuePair(Of String, Object)), IObservableMap(Of String, Object)
Производный
Атрибуты
Реализации
IMap<K,V> IDictionary<K,V> IDictionary<String,Object> IMap<Platform::String,Platform::Object> IMap<winrt::hstring,IInspectable> IIterable<IKeyValuePair<K,V>> IEnumerable<KeyValuePair<K,V>> IEnumerable<KeyValuePair<String,Object>> IIterable<IKeyValuePair<Platform::String,Platform::Object>> IIterable<IKeyValuePair<winrt::hstring,IInspectable>> IObservableMap<String,Object> IObservableMap<Platform::String,Platform::Object> IObservableMap<winrt::hstring,IInspectable>

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (появилось в v1.0)

Примеры

В этом примере показано, как проверить наличие элемента в объекте IPropertySet, возвращаемом свойством среды выполнения Windows. В частности, это происходит из свойства CoreApplication.Properties. Этот фрагмент кода поставляется из примера HTTP-клиента ControlChannelTrigger HTTP. Обратите внимание на то, как версия C# приведение к IDictionary<string,object>, чтобы использовать индексатор, в то время как версия компонентов Visual C++ (C++/CX) использует HasKey и lookup. Как правило, это все, что вы делаете с объектом IPropertySet, полученным из различных свойств среды выполнения Windows, возвращающих тип: найдите определенные ключи в наборе свойств, а затем задайте для определенного свойства приложения соответствующее значение, если он существует.

// In this example, the channel name has been hardcoded to lookup the property bag 
// for any previous contexts. The channel name may be used in more sophisticated ways 
// in case an app has multiple ControlChannelTrigger objects. 
string channelId = "channelOne";
if (((IDictionary<string, object>)CoreApplication.Properties).ContainsKey(channelId))
{
    try
    {
        AppContext appContext = null;
        lock(CoreApplication.Properties)
        {
            appContext = ((IDictionary<string, object>)CoreApplication.Properties)[channelId] as AppContext;
        }
        if (appContext != null && appContext.CommunicationInstance != null)
        {
            CommunicationModule communicationInstance = appContext.CommunicationInstance;

            // Clear any existing channels, sockets etc. 
            communicationInstance.Reset();

            // Create CCT enabled transport. 
            communicationInstance.SetUpTransport(communicationInstance.serverUri, GetType().Name);
        }
    }
    catch (Exception ex)
    {
        Diag.DebugPrint("Registering with CCT failed with: " + ex.ToString());
    }
}
else
{
    Diag.DebugPrint("Cannot find AppContext key channelOne");
}
// In this example, the channel name has been hardcoded to look up the property bag
// for any previous contexts. The channel name may be used in more sophisticated ways
// in case an app has multiple ControlChannelTrigger objects.
std::wstring channelId{ L"channelOne" };
if (CoreApplication::Properties().HasKey(channelId))
{
    try
    {
        auto appContext{ CoreApplication::Properties().Lookup(channelId).as<AppContext>() };
        if (appContext && appContext->CommunicationInstance())
        {
            CommunicationModule communicationInstance{ appContext->CommunicationInstance() };

            // Clear any existing channels, sockets etc.
            communicationInstance.Reset();

            // Create CCT enabled transport.
            communicationInstance.SetUpTransport(L"NetworkChangeTask");
        }
    }
    catch (winrt::hresult_error const& ex)
    {
        Diag::DebugPrint(L"Registering with CCT failed with: " + ex.message());
    }
}
else
{
    Diag::DebugPrint(L"Cannot find AppContext key channelOne");
}
// In this example, the channel name has been hardcoded to look up the property bag
// for any previous contexts. The channel name may be used in more sophisticated ways
// in case an app has multiple ControlChannelTrigger objects.
String^ channelId = "channelOne";
if (CoreApplication::Properties->HasKey(channelId))
{
    try
    {
        auto appContext = dynamic_cast<AppContext^>(CoreApplication::Properties->Lookup(channelId));
        if (appContext != nullptr && appContext->CommunicationInstance != nullptr)
        {
            CommunicationModule^ communicationInstance = appContext->CommunicationInstance;

            // Clear any existing channels, sockets etc. 
            communicationInstance->Reset();

            // Create CCT enabled transport 
            communicationInstance->SetUpTransport("NetworkChangeTask");
        }
    }
    catch (Exception^ ex)
    {
        Diag::DebugPrint("Registering with CCT failed with: " + ex->Message);
    }
}
else
{
    Diag::DebugPrint("Cannot find AppContext key channelOne");
}

Комментарии

Этот интерфейс не является необычным в том, что он не определяет новых членов. Вместо этого он сопоставляет три других интерфейса коллекции, чтобы они совместно используют те же ограничения параметров типа:

  • IIterable (ограничение IKeyValuePairс внутренним ограничением String, Object)
  • IMap (ограничение строковой, объект)
  • IObservableMap (ограничение string, Object)

При приведение объекта к IPropertySet (который не является универсальным) можно использовать объединенные методы этих трех интерфейсов на основе использования String для ключа, Object для значения. Для практической реализации среда выполнения Windows использует класс propertySet . Ознакомьтесь с документацией по различным членам PropertySet, чтобы узнать, как использовать эти методы после приведения в качестве IPropertySet.

Во многих случаях, когда API среды выполнения Windows использует PropertySet в качестве значения, он фактически отображается как IPropertySet в сигнатурах. PropertySet можно считать практической реализацией IPropertySet, готовой для использования кодом приложения. Код JavaScript может рассматривать любое значение IPropertySet, как если бы он реализовал прототипы PropertySet. Использование по типу является основным сценарием для IPropertySet; Фактически реализация интерфейса в коде приложения менее распространена.

IPropertySet также реализуется классом ValueSet. ValueSet — это тип значения нескольких свойств ContinuationData, которые позволяют восстановить состояние при возобновлении работы приложений после вызова метода AndContinue, который может деактивировать приложение. ValueSet и все свойства ContinuationData и методы AndContinue — это только API Windows Phone, так как это только Windows Phone, который имеет такое поведение. Дополнительные сведения см. в статье Как продолжить приложение Магазина Windows Phone после вызова метода AndContinue. Разница между ValueSet и PropertySet заключается в том, что реализация ValueSet методов, таких как Insert, применяет, что его значения свойств являются типами значений.

События

MapChanged

Происходит при изменении карты.

(Унаследовано от IObservableMap<K,V>)

Применяется к

См. также раздел