//protected override void ClearContainerForItemOverride(DependencyObject element, object item) //{ // if (!PlatformIndependent.IsWindowsPhoneDevice && ItemsSource != null && ItemsSource is IResizeableItems) // { // var gridview = (element as ListViewItem).ContentTemplateRoot as VariableSizedGridView; // gridview.ItemClick -= Gridview_ItemClick; // //variableSizedGridViews.Remove(gridview); // } // base.ClearContainerForItemOverride(element, item); //} private void GridviewItem_Loaded(object sender, RoutedEventArgs e) { var gridview = (sender as ListViewItem).ContentTemplateRoot as VariableSizedGridView; var resizeableItem = ResizeableItems.GetItem(this.ActualWidth); if (resizeableItem != null) { resizeableItem.ItemWidth = (int)(this.ActualWidth / resizeableItem.Columns - 7); gridview.ResizeableItem = resizeableItem; } gridview.ItemClick -= Gridview_ItemClick; gridview.ItemClick += Gridview_ItemClick; //gridview.ItemTemplate = VirtualizedVariableSizedGridViewItemTemplate; Binding binding = new Binding(); binding.Source = this; binding.Mode = BindingMode.OneWay; binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; binding.Path = new PropertyPath("VirtualizedVariableSizedGridViewItemTemplate"); gridview.SetBinding(GridView.ItemTemplateProperty, binding); Binding binding1 = new Binding(); binding1.Source = this; binding1.Mode = BindingMode.OneWay; binding1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; binding1.Path = new PropertyPath("VirtualizedVariableSizedInternalGridViewContainerStyle"); gridview.SetBinding(GridView.ItemContainerStyleProperty, binding1); (sender as ListViewItem).Loaded -= GridviewItem_Loaded; }
protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); if (!PlatformIndependent.IsWindowsPhoneDevice && ItemsSource != null && ItemsSource is IResizeableItems) { base.ItemClick -= VirtualizedVariableSizedGridView_ItemClick; var gridviewItem = element as ListViewItem; if (VirtualizedVariableSizedGridViewItemContainerStyle != null) { gridviewItem.Style = VirtualizedVariableSizedGridViewItemContainerStyle; } //Container Recycling, so ContentTemplateRoot maybe not null. if (gridviewItem.ContentTemplateRoot != null) { var gridview = gridviewItem.ContentTemplateRoot as VariableSizedGridView; //variableSizedGridViews.Add(gridview); var resizeableItem = ResizeableItems.GetItem(this.ActualWidth); if (resizeableItem != null) { resizeableItem.ItemWidth = (int)(this.ActualWidth / resizeableItem.Columns - 7); gridview.ResizeableItem = resizeableItem; gridview.ItemClick -= Gridview_ItemClick; gridview.ItemClick += Gridview_ItemClick; } if (gridview.ItemContainerStyle == null) { Binding binding1 = new Binding(); binding1.Source = this; binding1.Mode = BindingMode.OneWay; binding1.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; binding1.Path = new PropertyPath("VirtualizedVariableSizedInternalGridViewContainerStyle"); gridview.SetBinding(GridView.ItemContainerStyleProperty, binding1); } } else { gridviewItem.Loaded -= GridviewItem_Loaded; gridviewItem.Loaded += GridviewItem_Loaded; } } }
private void OnMeasureOverride(Size availableSize) { if (ItemsSource != null && ItemsSource is IResizeableItems && availableSize != Size.Empty) { var resizeableItem = ResizeableItems.GetItem(availableSize.Width); if (resizeableItem != null) { resizeableItem.ItemWidth = (int)(availableSize.Width / resizeableItem.Columns - 7); foreach (var item in this.Items) { var gridviewItem = this.ContainerFromItem(item) as ListViewItem; //not null, it's in viewport, so it need to update. if (gridviewItem != null && gridviewItem.ContentTemplateRoot != null) { var gridview = gridviewItem.ContentTemplateRoot as VariableSizedGridView; gridview.ResizeableItem = null; gridview.ResizeableItem = resizeableItem; } } } } }