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 函式 | 擷取 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 物件之向量變更事件的委派。 |
迭代器
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);
參數
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&)
{
...
});