Шаблон структуры 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: пакет SDK Windows версии 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 | Извлекает IIterator , представляющий первый элемент в объекте observable_vector_base . |
функция 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 . |
Iterators
Observable_vector_base — это диапазон, который определяется внутренними бесплатными функциями (каждый из которых получает итератор), совместимый со стандартными языковыми функциями. Из-за этого можно перечислить элементы в объекте observable_vector_base с помощью оператора на основе for
диапазона.
Можно также получить IIterator из функции observable_vector_base::First и использовать ее для прохода по элементам в объекте 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);
Параметры
value
Добавляемый элемент.
функция observable_vector_base::Clear
Удаляет все элементы из объекта observable_vector_base .
Синтаксис
void Clear() noexcept;
функция observable_vector_base::First
Извлекает IIterator , представляющий первый элемент в объекте observable_vector_base .
Синтаксис
auto First();
Возвращаемое значение
IIterator, представляющий первый элемент в объекте observable_vector_base.
функция observable_vector_base::GetAt
Извлекает элемент по указанному индексу в объекте observable_vector_base .
Синтаксис
T GetAt(uint32_t const index) const;
Параметры
index
Отсчитываемый от нуля индекс элемента.
Возвращаемое значение
Элемент по указанному индексу в объекте observable_vector_base .
функция observable_vector_base::GetMany
Извлекает коллекцию элементов в объекте observable_vector_base , начиная с заданного индекса.
Синтаксис
uint32_t GetMany(uint32_t const startIndex, array_view<T> values) const;
Параметры
startIndex
Отсчитываемый от нуля индекс элемента для начала.
values
Array_view для копирования элементов.
Возвращаемое значение
Значение, представляющее количество полученных элементов.
Функция observable_vector_base::GetView
Извлекает неизменяемое представление объекта observable_vector_base .
Синтаксис
winrt::Windows::Foundation::Collections::IVectorView<T> GetView() const noexcept;
Возвращаемое значение
IVectorView, содержащий неизменяемое представление observable_vector_base.
Функция observable_vector_base::IndexOf
Извлекает индекс указанного элемента в объекте observable_vector_base .
Синтаксис
bool IndexOf(T const& value, uint32_t& index) const noexcept;
Параметры
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);
Параметры
index
Отсчитываемый от нуля индекс, по которому необходимо вставить элемент.
value
Вставляемый элемент.
функция observable_vector_base::RemoveAt
Удаляет элемент по указанному индексу в объекте observable_vector_base .
Синтаксис
void RemoveAt(uint32_t const index);
Параметры
index
Отсчитываемый от нуля индекс удаляемого элемента.
функция observable_vector_base::RemoveAtEnd
Удаляет последний элемент из объекта observable_vector_base .
Синтаксис
void RemoveAtEnd();
функция observable_vector_base::ReplaceAll
Заменяет все элементы в объекте observable_vector_base указанными элементами.
Синтаксис
void ReplaceAll(array_view<T const> value);
Параметры
value
Array_view, содержащий новые элементы.
функция observable_vector_base::SetAt
Задает значение элемента по указанному индексу в объекте observable_vector_base .
Синтаксис
void SetAt(uint32_t const index, T const& value);
Параметры
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&)
{
...
});