共用方式為


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 引進)

範例

這個範例示範如何檢查 Windows 運行時間屬性所傳回之 IPropertySet 物件內的專案。 具體來說,這是來自 CoreApplication.Properties 屬性。 此代碼段來自 ControlChannelTrigger HTTP 用戶端範例。 請注意 C# 版本如何轉換成 IDictionary<string,object>,讓它可以使用索引器,而 Visual C++ 元件延伸模組 (C++/CX) 版本則使用 HasKeyLookup。 一般而言,這是您從傳回類型的各種 Windows 執行時間屬性取得的 IPropertySet 物件:尋找屬性集中的特定索引鍵,然後在存在時,將某些應用程式屬性設定為對應的值。

// 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,具有字元串、物件的內部條件 約束)
  • IMap (條件約束 字串物件
  • IObservableMap (條件約束 StringObject

如果您將對象轉換成 IPropertySet(不是泛型),則可以根據索引鍵使用 String,使用這三個介面的結合方法,Object 作為值。 針對實際實作,Windows 運行時間會使用 PropertySet 類別。 請參閱 PropertySet 各種成員的檔,以瞭解如何在您轉型為 IPropertySet 之後使用這些方法。

在許多情況下,Windows 運行時間 API 會使用 PropertySet 做為值,實際上會在簽章中顯示為 IPropertySet。 PropertySet 可視為可供應用程式程式代碼使用的 IPropertySet 實際實作。 JavaScript 程式代碼可以將任何 IPropertySet 值視為實作 PropertySet 原型。 依類型使用是 IPropertySet 的主要案例;實際上,在應用程式程式代碼中實作 介面較不常見。

IPropertySet 也會由 ValueSet 類別實作。 ValueSet 是數個 ContinuationData 屬性的值類型,在呼叫可能會停用應用程式的 AndContinue 方法之後,啟用還原狀態。 ValueSet 和所有 ContinuationData 屬性和 AndContinue 方法都只Windows Phone API,因為它只有具有此行為的Windows Phone。 如需詳細資訊,請參閱 如何在呼叫 AndContinue 方法之後繼續Windows Phone市集應用程式。 ValueSetPropertySet 之間的差異在於,Insert 等方法的 ValueSet 實作會強制其屬性值為實值型別。

事件

MapChanged

發生於地圖變更時。

(繼承來源 IObservableMap<K,V>)

適用於

另請參閱