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

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

语法

template <typename D, typename T>
struct observable_vector_base : vector_base<D, T>

模板参数

typename D 派生的类型名称。

typename Tobservable_vector_base中的元素的类型。

要求

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

命名空间: winrt

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

成员函数

函数 说明
observable_vector_base::Append 函数 将元素追加到 observable_vector_base 对象的末尾。
observable_vector_base::Clear 函数 observable_vector_base 对象中删除所有元素。
observable_vector_base::First 函数 检索表示observable_vector_base对象中的第一个元素的 IIterator
observable_vector_base::GetAt 函数 检索 observable_vector_base 对象中指定索引处的元素。
observable_vector_base::GetMany 函数 检索从给定索引开始 的observable_vector_base 对象中的元素集合。
observable_vector_base::GetView 函数 检索 observable_vector_base 对象的不可变视图。
observable_vector_base::IndexOf 函数 检索 observable_vector_base 对象中指定元素的索引。
observable_vector_base::InsertAt 函数 observable_vector_base 对象中的指定索引处插入元素。
observable_vector_base::RemoveAt 函数 删除 observable_vector_base 对象中指定索引处的元素。
observable_vector_base::RemoveAtEnd 函数 observable_vector_base 对象中删除最后一个元素。
observable_vector_base::ReplaceAll 函数 observable_vector_base 对象中的所有元素替换为指定的元素。
observable_vector_base::SetAt 函数 设置 observable_vector_base 对象中指定索引处的元素的值。
observable_vector_base::Size 函数 检索 observable_vector_base 对象中的元素数。
observable_vector_base::VectorChanged 函数 注册并撤销处理 observable_vector_base 对象的矢量更改事件的委托。

迭代器

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

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

...
#include <iostream>
using namespace winrt;
using namespace Windows::Foundation::Collections;
...
struct MyObservableVector :
    implements<MyObservableVector, IObservableVector<float>, IVector<float>, IVectorView<float>, IIterable<float>>,
    winrt::observable_vector_base<MyObservableVector, float>
{
    auto& get_container() const noexcept
    {
        return m_values;
    }

    auto& get_container() noexcept
    {
        return m_values;
    }

private:
    std::vector<float> m_values{ 0.1f, 0.2f, 0.3f };
};
...
IObservableVector<float> coll{ winrt::make<MyObservableVector>() };

for (auto const& el : coll)
{
    std::wcout << el << std::endl;
}

IIterator<float> it{ coll.First() };
while (it.HasCurrent())
{
    std::wcout << it.Current() << std::endl;
    it.MoveNext();
}

observable_vector_base::Append 函数

将元素追加到 observable_vector_base 对象的末尾。

语法

void Append(T const& value);

parameters

value 要追加的元素。

observable_vector_base::Clear 函数

observable_vector_base 对象中删除所有元素。

语法

void Clear() noexcept;

observable_vector_base::First 函数

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

语法

auto First();

返回值

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

observable_vector_base::GetAt 函数

检索 observable_vector_base 对象中指定索引处的元素。

语法

T GetAt(uint32_t const index) const;

parameters

index 从零开始的元素索引。

返回值

observable_vector_base 对象中指定索引处的元素。

observable_vector_base::GetMany 函数

检索从给定索引开始 的observable_vector_base 对象中的元素集合。

语法

uint32_t GetMany(uint32_t const startIndex, array_view<T> values) const;

parameters

startIndex 要从零开始的元素索引。

values 要将项复制到的 array_view

返回值

一个值,表示检索的元素数。

observable_vector_base::GetView 函数

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

语法

winrt::Windows::Foundation::Collections::IVectorView<T> GetView() const noexcept;

返回值

包含observable_vector_base不可变视图的 IVectorView

observable_vector_base::IndexOf 函数

检索 observable_vector_base 对象中指定元素的索引。

语法

bool IndexOf(T const& value, uint32_t& index) const noexcept;

parameters

value 要查找 的observable_vector_base 对象中的元素。

index 如果找到元素,则为从零开始的元素索引,否则 为observable_vector_base 对象中的元素数。

返回值

true 如果找到元素,则为 ;否则为 false

observable_vector_base::InsertAt 函数

observable_vector_base 对象中的指定索引处插入元素。

语法

void InsertAt(uint32_t const index, T const& value);

parameters

index 要在其中插入元素的从零开始的索引。

value 要插入的元素。

observable_vector_base::RemoveAt 函数

删除 observable_vector_base 对象中指定索引处的元素。

语法

void RemoveAt(uint32_t const index);

parameters

index 要移除的元素的从零开始的索引。

observable_vector_base::RemoveAtEnd 函数

observable_vector_base 对象中删除最后一个元素。

语法

void RemoveAtEnd();

observable_vector_base::ReplaceAll 函数

observable_vector_base 对象中的所有元素替换为指定的元素。

语法

void ReplaceAll(array_view<T const> value);

parameters

value 包含新元素 的array_view

observable_vector_base::SetAt 函数

设置 observable_vector_base 对象中指定索引处元素的值。

语法

void SetAt(uint32_t const index, T const& value);

parameters

index 要设置其值的元素的从零开始的索引。

value 要设置的元素值。

observable_vector_base::Size 函数

检索 observable_vector_base 对象中的元素数。

语法

uint32_t Size() const noexcept;

返回值

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

observable_vector_base::VectorChanged 函数

注册和/或撤销处理 observable_vector_base 对象的矢量更改事件的委托。

语法

// Register
winrt::event_token VectorChanged(winrt::Windows::Foundation::Collections::VectorChangedEventHandler<T> const& handler);

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

// Revoke with event_revoker
VectorChanged_revoker VectorChanged(winrt::auto_revoke_t, winrt::Windows::Foundation::Collections::VectorChangedEventHandler<T> const& handler) const;

返回值

void可以撤消已注册委托的 winrt::event_token,或者VectorChanged_revoker (winrt::event_revoker< IObservableVectorT<>>) 的类型别名,可以使用该别名撤销已注册的委托。

示例

winrt::event_revoker<IObservableVector<float>> m_event_revoker;
...
m_event_revoker = coll.VectorChanged(winrt::auto_revoke, [this](IObservableVector<float> const&, IVectorChangedEventArgs const&)
{
    ...
});

请参阅