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 . . .
in progress of including a "Prism-like" guidance for WPF Composites here containing a new
(similar to event aggregator but simpler with no DI container, merely leveraging WPF's default global Application.Current.Properties container) and
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.
Link to screenshot:
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
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:
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)."
Paging Control - now with Page Recycling!
Link to screenshot:
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
above for potentially thousands of records, or the Extended WPF Toolkit™ Community Edition DataGrid
offered open-source here
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 . . .
The file-based data access code that I am using is SQLite, a free, open-source SQL database engine available here:
Additional information on starting a new project is available here:
Project Startup Guide