winrt::observable_map_base结构模板 (C++/WinRT) )

一个基类,可以从中派生来实现自己的自定义可观察关联集合。 有关详细信息和代码示例,请参阅 使用 C++/WinRT 的集合

语法

template <typename D, typename K, typename V>
struct observable_map_base : map_base<D, K, V>

模板参数

typename D 派生的类型名称。

typename K 集合中键的类型。

typename V 集合中值的类型。

要求

支持的最低 SDK:Windows SDK 版本 10.0.17763.0 (Windows 10 版本 1809)

命名空间: winrt

标头: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (默认包含)

成员函数

函数 说明
observable_map_base::Clear 函数 observable_map_base 对象中删除所有元素。
observable_map_base::First 函数 检索表示observable_map_base对象中第一个元素的 IIterator
observable_map_base::GetView 函数 检索 observable_map_base 对象的不可变视图。
observable_map_base::HasKey 函数 确定指定的键是否属于 observable_map_base 对象中的元素。
observable_map_base::Insert 函数 observable_map_base 对象中插入或更新元素。
observable_map_base::Lookup 函数 查找由指定键标识的元素,并检索相应的值。
observable_map_base::MapChanged 函数 注册和撤销处理 observable_map_base 对象的映射更改事件的委托。
observable_map_base::Remove 函数 observable_map_base 对象中删除元素。
observable_map_base::Size 函数 检索 observable_map_base 对象中的元素数。

迭代器

observable_map_base是一个范围,该范围由内部免费函数定义, (每个函数检索与标准语言功能兼容的迭代器) 。 因此,可以使用基于for范围的语句枚举observable_map_base对象中的元素。

还可以从 observable_map_base::First 函数检索 IIterator,并使用该函数循环访问observable_map_base对象中的元素。

...
#include <iostream>
using namespace winrt;
using namespace Windows::Foundation::Collections;
...
struct MyObservableMap :
    implements<MyObservableMap, IObservableMap<winrt::hstring, int>, IMap<winrt::hstring, int>, IMapView<winrt::hstring, int>, IIterable<IKeyValuePair<winrt::hstring, int>>>,
    winrt::observable_map_base<MyObservableMap, winrt::hstring, int>
{
    auto& get_container() const noexcept
    {
        return m_values;
    }

    auto& get_container() noexcept
    {
        return m_values;
    }

private:
    std::map<winrt::hstring, int> m_values{
        { L"AliceBlue", 0xfff0f8ff }, { L"AntiqueWhite", 0xfffaebd7 }
    };
};
...
IObservableMap<winrt::hstring, int> map{ winrt::make<MyObservableMap>() };

for (auto const& el : map)
{
    std::wcout << el.Key().c_str() << L", " << std::hex << el.Value() << std::endl;
}

IIterator<IKeyValuePair<winrt::hstring, int>> it{ map.First() };
while (it.HasCurrent())
{
    std::wcout << it.Current().Key().c_str() << L", " << std::hex << it.Current().Value() << std::endl;
    it.MoveNext();
}

observable_map_base::Clear 函数

observable_map_base 对象中删除所有元素。

语法

void Clear() noexcept;

observable_map_base::First 函数

检索表示observable_map_base对象中第一个元素的 IIterator

语法

auto First();

返回值

一个 IIterator ,表示 observable_map_base 对象中的第一个元素。

observable_map_base::GetView 函数

检索 observable_map_base 对象的不可变视图。

语法

winrt::Windows::Foundation::Collections::IMapView<K, V> GetView() const;

返回值

包含observable_map_base不可变视图的 IMapView

observable_map_base::HasKey 函数

确定指定的键是否属于 observable_map_base 对象中的元素。

语法

bool HasKey(K const& key) const noexcept;

parameters

key 要查找的密钥。

返回值

true 如果找到包含键的元素,则为 ;否则 false为 。

observable_map_base::Insert 函数

observable_map_base 对象中插入或更新元素。

语法

bool Insert(K const& key, V const& value);

parameters

key 与要插入或更新的元素关联的键。

value 要插入或替换的值。

返回值

true 如果找到并更新了具有指定键的元素,否则 false

observable_map_base::Lookup 函数

查找由指定键标识的元素,并检索相应的值。

语法

V Lookup(K const& key) const;

parameters

key 要查找的键。

返回值

如果找到,则对应于要查找的键的值,否则将引发 winrt::hresult_out_of_bounds 异常。

observable_vector_base::MapChanged 函数

注册和/或撤销处理 observable_map_base 对象的映射更改事件的委托。

语法

// Register
winrt::event_token MapChanged(winrt::Windows::Foundation::Collections::MapChangedEventHandler<K, V> const& handler);

// Revoke with event_token
void MapChanged(winrt::event_token const cookie);

// Revoke with event_revoker
MapChanged_revoker MapChanged(winrt::auto_revoke_t, winrt::Windows::Foundation::Collections::MapChangedEventHandler<K, V> const& handler) const

返回值

void可以撤销已注册委托的 winrt::event_token,或者MapChanged_revoker (winrt::event_revoker< IObservableMapK< 的类型别名,V>>) 可以撤销已注册的委托。

示例

winrt::event_revoker<IObservableMap<winrt::hstring, int>> m_event_revoker;
...
m_event_revoker = map.MapChanged(winrt::auto_revoke, [this](IObservableMap<winrt::hstring, int> const&, IMapChangedEventArgs<winrt::hstring> const&)
{
    ...
});

observable_map_base::Remove 函数

observable_map_base 对象中删除元素。

语法

void Remove(K const& key);

parameters

key 与要删除的元素关联的键。

observable_map_base::Size 函数

检索 observable_map_base 对象中的元素数。

语法

uint32_t Size() const noexcept;

返回值

一个值,表示 observable_map_base 对象中的元素数。

请参阅