WPF Treeview visible Items when Scrolling - c#

I'm using a Multiselect Treeview in MVVM WPF App. A ReactiveCollection is binded as the treeview source. Implemented paging mechanism internally for the source and populated the collection with dummy items.
Now I need to how many items (rows) in the treeview are actually visible in the GUI at any point of time and when the user scrolls. Basically, I want to know the first and last item index in the visible view at any given time and I will implement paging based on this item(row) index and scrolling.
And this logic to detect item index must be implemented as a behaviour for itemscontrol, so that I can reuse it for any itemscontrol.

Related

Virtualize WPF Grid bound to composite collection

I have a Listview that uses a grid for its ItemsPanel instead of a stackpanel (a stackpanel won't suffice).
The ItemsSource of a grid is bound to a CompositeCollection of various items; and the items, of different classes, are not ordered (i.e., first item is not necessarily in 1st row/ 1st column; it's possible that last item in the list may physically be found on the top row of the grid).
So now I am not able to use VirtualizingStackPanel,... when I check Snoop, the ListView lists all items in the ItemsSource even when they're not visible.
Question: Is there a way to virtualize contents inside of the grid?

WPF Adorner and ICollectionView Refresh

I have a list box bound to a collection of items.
Whenever i call a Refresh on a CollectionView of bound items the adorners disappear from list box items.
Can somebody explain why and how i can overcome this?
Should i re-add adorners after each refresh?
An adorner is linked to a particular element, in your case it seems like you are adorning ListBoxItem elements.
When you call the Refresh method on the collection view, this will cause the ListBox control to delete all of its existing ListBoxItem children and recreate them. Your adorners are "disappearing" because the elements they are adorning have been deleted by the list box.
You can either recreate the adorners or try to find some way of refreshing your list box that doesn't involve refreshing the collection view.

Accommodate custom item on winrt listview

I'm developing windows metro app. In my application, I've one Listview with wrapgrid in itemspanel to display list of items on vertical rows with specific height. I want to display one item on top of the first column of list view, which shows result/stats of list items.
I would like to know if it is possible without adding custom item to datasource of listview?
ListView has a Header property in which you can Place content before the ListViews Items.
As commented, I've implemented following solution which is not elegant but worked for me.
Use Datasource converter to add dummy item in main list. So, my original list remains as is.
Use Template Selector to bind different template for first item.
Handle Selection and clicked event of dummy item.

Populating a panel with selected items from a grid in WPF

I have a DataGrid with a bunch of rows representing items in my system. I want that each time a user selects an item in the grid (the user is allowed to select multiple items) the item will be added to a StackPanel and have its own datatemplate using an Expander to display its data.
Can anyone help me do this in WPF?
Thanks!
John.
I wouldn't use a StackPanel, but an ItemsControl, and bind its ItemsSource to the DataGrid's SelectedItems. However, at the moment I'm not sure whether SelectedItems has change notification. If not, you might have to use a CollectionViewSource in between, and call CollectionViewSource.Refresh during the DataGrid.SelectionChanged event.

WP7 Panorama items binding and adding other custom panorama items c#

I am running into an issue where i am using a panorama control and binding it to a datasource. But i still do want other custom items on another panorama items where i need a textblock, a grid and so on. So if i am adding it in the backend it doesnt show up those panorama items. It just shows the datasource binded items. Why is that so? Both of them should work out.
Can anybody help me with a solution for this.
Thank You.
Since you're wanting to manually add PanoramaItems, I can think of two approaches:
Make sure your Panorama.ItemsSource is set to an ObservableCollection that is accessible in the code behind or viewmodel, and then add your new items to that ObservableCollection which should update the Panorama.
Don't databind the Panorama control's Items - just add items manually when you want them.
Either way, the Panorama's ItemTemplate gets evaluated when the items are added to the underlying collection, so using a DataTemplateSelector will allow your code to determine which DataTemplate to apply when the new item is added without affecting the templates for previous items.
/chris

Categories