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. Обратите внимание, что версия C# приводит к строке IDictionary<, объекту> , чтобы использовать индексатор, в то время как в версии компонентов 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 ( строка ограничения, объект)

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

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

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

События

MapChanged

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

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

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

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