winrt::observable_vector_base结构模板 (C++/WinRT)
一个基类,可从中派生来实现自己的自定义可观测向量。 有关详细信息和代码示例,请参阅 使用 C++/WinRT 的集合。
语法
template <typename D, typename T>
struct observable_vector_base : vector_base<D, T>
模板参数
typename D
派生的类型名称。
typename T
observable_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&)
{
...
});