Шаблон структуры 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 Отсчитываемый от нуля индекс элемента для начала.

valuesArray_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);

Параметры

valueArray_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;

Возвращаемое значение

Либо voidwinrt::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&)
{
    ...
});

См. также раздел