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
Во многих случаях, когда 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>) |