上一章我們了解了微軟的方法,歸根結(jié)底是要重寫PrepareContainerForItemOverrid這個方法,最后將我們的ColumnSpanProperty同DataItem的ColumnSpan進行綁定,這樣我們就可以在初始化DataItem的時候隨意地改變一個Item的大小了。
本章介紹另一種方法,這種方法的大體思路同上一方法類似也是要重寫PrepareContainerForItemOverride這個方法,只是里面的做法不同。
先上代碼:
1 public ref class VariableSizedWrapGridView sealed : public Windows::UI::Xaml::Controls::GridView
2 {
3 protected:
4 virtual void PrepareContainerForItemOverride(Windows::UI::Xaml::DependencyObject^ element, Platform::Object^ item) override;
5 };
2 {
3 protected:
4 virtual void PrepareContainerForItemOverride(Windows::UI::Xaml::DependencyObject^ element, Platform::Object^ item) override;
5 };
注意到我們的類里面只有這么一個需要重寫的方法。
再來看看我們是如何重寫該方法:
1 void VariableSizedWrapGridView::PrepareContainerForItemOverride(DependencyObject^ element, Platform::Object^ item)
2 {
3 auto viewMode = (DataItem^)(item);
4
5 element->SetValue(VariableSizedWrapGrid::ColumnSpanProperty, viewMode->ColumnSpan);
6 element->SetValue(VariableSizedWrapGrid::RowSpanProperty, viewMode->RowSpan);
7 GridView::PrepareContainerForItemOverride(element, item);
8 }
我們看到,我們不是使用的Binding,而是直接賦值,將DataItem::ColumnSpan這個屬性直接賦值給 VariableSizedGridView的VariableSizedWrapGrid::ColumnSpanProperty。 我們同樣只需要在DataItem初始化的時候設(shè)置好相應(yīng)的ColumnSpan和RowSpan就可以實現(xiàn)不同尺寸的Item。2 {
3 auto viewMode = (DataItem^)(item);
4
5 element->SetValue(VariableSizedWrapGrid::ColumnSpanProperty, viewMode->ColumnSpan);
6 element->SetValue(VariableSizedWrapGrid::RowSpanProperty, viewMode->RowSpan);
7 GridView::PrepareContainerForItemOverride(element, item);
8 }
這種方法比之之前微軟的方法要簡單許多,沒有依賴屬性。但是微軟的方法的好處是,你可以選擇你要綁定的屬性。各種優(yōu)缺點,大家可以酌情用之。
下期提示:如何在一個GridView中實現(xiàn)不同的DataTemplate
