上一章我们了解了微软的方法,归根结底是要重写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 };
注意到我们的类里面只有这么一个需要重写的方法。
再来看看我们是如何重写该方法:
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初始化的时候设置好相应的ColumnSpan和RowSpan就可以实现不同尺寸的Item。
这种方法比之之前微软的方法要简单许多,没有依赖属性。但是微软的方法的好处是,你可以选择你要绑定的属性。各种优缺点,大家可以酌情用之。
下期提示:如何在一个GridView中实现不同的DataTemplate
,例如:
posted on 2012-10-14 18:26
Dino-Tech 阅读(1135)
评论(0) 编辑 收藏 引用