protected override void Dispose(DisposeTypes type) { if (disposed) { return; } if (type == DisposeTypes.Explicit) { // call the clear! if (RecycleCache != null) { foreach (RecyclerViewItem item in RecycleCache) { UnrealizeItem(item, false); } RecycleCache.Clear(); } InternalItemsLayouter.Clear(); InternalItemsLayouter = null; ItemsSource = null; ItemTemplate = null; if (InternalItemSource != null) { InternalItemSource.Dispose(); InternalItemSource = null; } // } base.Dispose(type); }
/// <summary> /// Realize indexed item. /// </summary> /// <param name="index"> Index position of realizing item </param> internal virtual RecyclerViewItem RealizeItem(int index) { object context = InternalItemSource.GetItem(index); // Check DataTemplate is Same! if (ItemTemplate is DataTemplateSelector) { // Need to implements for caching of selector! } else { // pop item RecyclerViewItem item = PopRecycleCache(ItemTemplate); if (item != null) { DecorateItem(item, index, context); return(item); } } object content = DataTemplateExtensions.CreateContent(ItemTemplate, context, (BindableObject)this) ?? throw new Exception("Template return null object."); if (content is RecyclerViewItem) { RecyclerViewItem item = (RecyclerViewItem)content; ContentContainer.Add(item); DecorateItem(item, index, context); return(item); } else { throw new Exception("Template content must be type of ViewItem"); } }
protected override void Dispose(DisposeTypes type) { if (disposed) { return; } if (type == DisposeTypes.Explicit) { // call the clear! if (RecycleCache != null) { ClearCache(); } InternalItemsLayouter?.Clear(); InternalItemsLayouter = null; ItemsSource = null; ItemTemplate = null; if (InternalItemSource != null) { InternalItemSource.Dispose(); InternalItemSource = null; } // } base.Dispose(type); }
protected override void Dispose(DisposeTypes type) { if (disposed) { return; } if (type == DisposeTypes.Explicit) { disposed = true; // call the clear! if (RecycleCache != null) { foreach (RecyclerViewItem item in RecycleCache) { //ContentContainer.Remove(item); Utility.Dispose(item); } RecycleCache.Clear(); } InternalItemsLayouter.Clear(); InternalItemsLayouter = null; ItemsSource = null; ItemTemplate = null; if (InternalItemSource != null) { InternalItemSource.Dispose(); } // } base.Dispose(type); }
private void OnWindowClosing(object sender, RoutedEventArgs e) { var window = sender as MdiWindow; if (window?.DataContext != null) { InternalItemSource?.Remove(window.DataContext); if (Items.Count > 0) { SelectedItem = Items[Items.Count - 1]; var windowNew = ItemContainerGenerator.ContainerFromItem(SelectedItem) as MdiWindow; if (windowNew != null) windowNew.IsSelected = true; } // clear window.FocusChanged -= OnWindowFocusChanged; window.Closing -= OnWindowClosing; window.WindowStateChanged -= OnWindowStateChanged; window.DataContext = null; Windows.Remove(window); } }
private void DecorateItem(RecyclerViewItem item, int index, object context) { item.Index = index; item.ParentItemsView = this; item.Template = (ItemTemplate as DataTemplateSelector)?.SelectDataTemplate(InternalItemSource.GetItem(index), this) ?? ItemTemplate; item.BindingContext = context; item.Relayout += OnItemRelayout; }