3/19/2014: latest check-in has been updated for Version 5.0 of WPF Composites (at least in the basics.) Note that this is NOT the latest download. To navigate to the latest check-in, go to Source Code - History . . .

UPDATE: in progress of including a "Prism-like" guidance for WPF Composites here containing a new ActionAggregator (similar to event aggregator but simpler with no DI container, merely leveraging WPF's default global Application.Current.Properties container) and UserControlRegions to add/remove UserControls to.
There is even a Model-View-Presenter (MVP) example with an NUnit test or two, even testing directly against the WPF UI Object graphs, merely indirecting "commands" thru Actions in the Presenter (to allow firing the Actions directly from the unit test, similar to Commands. I just prefer Actions, lighter weight!)

WPF Composites Contrib is a supporting project to WPF Composites (WPF-CPS) to allow exploring/building out new controls and techniques which leverage this existing code library.

WPF Composites (WPF-CPS) provides an alternative, concise, C# (or IronPython or F#) code-behind approach to managing WPF UI Framework Element composites. WPF Composites are normally managed via XAML and DataTemplates but this library uses ID's and X-Y Coordinates instead to position elements on the screen. This is currently for synchronous apps only. It is not designed to be thread-safe. I welcome volunteers!

WPF-CPS works via 100% code-behind, zero XAML, has CSS-like Selectors, has Generators to generate multiple Framework Elements based on a single Prototype Element's properties (e.g. create a button and automatically clone it 5 times), and supports 26 different WPF controls. Just added sorting to the panels too to allow sorting Grid, StackPanel, DockPanel, WrapPanel, TreeView, and DataGrid.

Squares Navigator
Link to screenshot: Squares Navigator
The first contribution I am making to WPF Composites Contrib is an exploration of the concept of a Squares Navigator, a kind of data visualization similar to paging. Each square represents 1/400th of a very large dataset. In this example, I leverage a dataset of around 39,000 mutual fund records provided by the SEC for free at data.gov here:
http://catalog.data.gov/dataset/investment-company-series-and-class-information

Information on the DataSet from Data.Gov
"Securities and ExceInvestment Company Series and Class Information

The Series and Class Report provides basic identification information for all active registered investment company series and classes that have been issued IDs by the Commission. Beginning on February 6, 2006, all open-end mutual funds (Form N-1A filers), insurance separate accounts organized as mutual funds (Form N-3 filers), insurance separate accounts organized as unit investment trusts (Form N-4 and Form N-6 filers). Investment companies (see adopting release http://www.sec.gov/rules/final/33-8590.pdf) have been required to use these IDs when making their electronic filings with the Commission. Since February 6, 2006, series and class IDs have also been issued to a few closed-end funds (Form N-2 filers) and unit investment trusts that are not used to fund separate accounts (S-6 filers)."
SOURCE: data.gov

Paging Control - now with Page Recycling!
Link to screenshot: Paging Control
The second contribution I am making is a basic paging control. The example shown is of paging in a DataGrid, but I imagine that it could be adapted to support paging other controls such as TreeView or ListBox? This example could also likely be expanded to support modified datasets as well with Insertions and Deletions. For now, I just showed paging through the fixed set of mutual fund records from the Squares Navigator example above.
The performance was a bit disappointing initially . . . until I added Page Recycling. The Paging Control can now likely handle a few hundred records per page with relative ease. Therefore, a total dataset of 3500 records would likely be quite manageable.
However, for larger datasets, there are alternative options that are also compatible with WPF-CPS including the Squares Navigator above for potentially thousands of records, or the Extended WPF Toolkit™ Community Edition DataGrid offered open-source here https://wpftoolkit.codeplex.com/ by Xceed http://xceed.com
Moreover, Searching and/or Filtering could likely readily be added to this basic paging control.

If I have time, I may explore Categorization solutions in this Contrib project too . . .

SQLite
The file-based data access code that I am using is SQLite, a free, open-source SQL database engine available here:
http://sqlite.org/
http://sqlite.org/copyright.html

Additional information on starting a new project is available here: Project Startup Guide.

Last edited Apr 3, 2014 at 4:48 AM by stagathome0069, version 25