February updates – what’s new from Mindscape?

Developer Notes

Here’s a look at this months Mindscape product updates. If you work with Javascript, make sure to take a look at Raygun.ioNow with source map support.

WPF Elements

  • Correct header when grouping enum DataGrid columns. (details)
  • Prevent grouping a column from one DataGrid to another. (details)
  • Resolved a potential memory leak after dragging a DataGrid column. (details)
  • Improved the estimate of the auto ChartAxis LabelStep feature. (details)
  • Changed DataGrid.SelectedItems to a writable dependancy property.
  • Added Many.PropertyName property. (details)
  • Update when dynamically adding series to a PolarChart. (details)
  • Resolved rare PolarChartGrid update issue. (details)
  • Support for custom display names for multiple objects in a PropertyGrid. (details)
  • Added menu scroll buttons to OfficeBlue theme. (details)
  • Support for dynamically updating style of an AreaSeries.
  • DataGrid CSV exporter support for quoted values. (details)
  • Support for PropertyDescriptor.Description when selecting multiple objects in a PropertyGrid. (details)
  • Resolved a potential divide by zero issue in the ChartAxis. (details)
  • Added DataGridItemsSource.CountOnCurrentPage property.
  • Resolved double up of SelectedItemChanged events. (details)
  • Resolved potential issues with NaN values in a ChartAxis. (details)
  • Release mouse capture after clicking on DataGrid padding column. (details)
  • Added NumericTextBox.AllowsNoValue property.
  • Special NoValue (NaN) support for DoubleTextBox.
  • Restore grouping when reloading an unloaded DataGrid. (details)
  • Improved support for strings on a chart axis. (details)
  • Resolved infinite loop when using custom data in a StockSeries. (details)

WPF Diagrams

  • Resolved issue with overriding the SnapLineDrawing when DiagramSurface is within a DataTemplate.
  • Resolved minor hit-testing issue.
  • Resolved minor binding issues.
  • Null reference fix. (details)
  • Resolved null reference exception when deleting a node while dragging or resizing it. (details)
  • Cancel marquee dragging when the DiagramSurface loses focus.
  • Added DiagramSurface.CanRelocateConnections property. (details)

Web Workbench

  • Update CoffeeScript to 1.7.1
  • Update Less to 1.6.3
  • Add new option to ignore errors returned from compiler output. (details)
  • Add IgnoreWarnings and IgnoreErrors to per file settings, no UI currently being surfaced for this. (details)
  • Add /w option to raise error code 4 if no output present but ignore errors otherwise. (details)
  • Add Uglify to NodeJS package

LightSpeed

  • Update cached entities after LockVersion is incremented.
  • Call EndEdit on associated ToOneModels.
  • Allow BeginEdit to not force lazy loading.
  • Fix for Int16 range validation issue. (details)

Raygun.io

As usual, the free editions of the nightly builds are available right now from the downloads page, and the full editions from the store.

January updates – what’s new from Mindscape?

Developer Notes

The Mindscape team is back in full force for another great year of coding! Here are some nice product updates to start the year.

WPF Elements

  • Dynamically change SeriesBrush on LineSeries. (details)
  • Improved chart performance.
  • Support for disabled foreground of cells when DataGrid is disabled. (details)
  • Added DataSeries.ConvertPhysicalToLogicalPoint method.
  • Improved bring-item-into-view feature for DataGrid.
  • Resolved issue calculating auto tick spacing for small values. (details)
  • Use Ceiling instead of Round when calculating axis ranges. (details)
  • Resolved issue with z order of chart points. (details)
  • Resolved a bug when using an ICustomTypeDescriptor within a Many editor of a PropertyGrid. (details)
  • Basic PropertyGrid support for ExpandoObject.
  • Handle mouse button up event of numeric text boxes. (details)
  • Resolved DataGrid resize issue in rare scenarios. (details)
  • Resolved potential cast exception in the VS designer.
  • Prevent DataGrid control from stealing tab navigation while in edit mode. (details)
  • Resolved minor DataGrid custom row height issue. (details)
  • Improved the DataGrid star sizing feature. (details)
  • Fixed DataGrid grouping for DataTable/DataTableView.
  • Smart scrolling for DataGrid selection.
  • Solved minor/rare measurement bug in DataGrid columns. (details)
  • Resolved a bug causing the numeric boxes to steal mouse capture. (details)
  • Resolved a DataGrid memory leak. (details)
  • Added heatmap gradient converter Orientation property. (details)
  • Resolved BindingList reset issue in DataGrid. (details)
  • Resolved a cast exception when using a custom type descriptor that return DependencyObjectPropertyDescriptors in a PropertyGrid. (details)

WPF Diagrams

  • Added a hook for custom intersection bridge validation logic. (details)
  • Fixed background of exported diagram images. (details)
  • Resolved issue preventing element to be double clicked in read only mode.
  • Resolved a bug in the default serializer that was losing user-modified segment positions.
  • Resolved redundant bounds changed event. (details)
  • Added ConnectionDropTarget.Position property. (details)
  • Resolved a bug causing the Diagram bounds to be NaN. (details)

Metro Elements

  • Added alternative X axes feature. (details)

Web Workbench

  • Support for source maps when compiling Less files. (details)
  • Resolve commands issue under Visual Studio 2013.
  • Improved performance of Compass compile.

LightSpeed

  • Suppress C# compiler warning. Caters for properties generated as field-only.
  • New function to allow custom operators.
  • Restrict warning to CTI.
  • Resolve issue with transient entities being included in migrations.
  • Surface errors raised from designer sync and provide some extra guidance.

Raygun.io

The free editions of the nightly builds are available right now from the downloads page, and the full editions from the store.

The summer sale is here!

Mindscape Summer Sale 2011

Note: This sale has now ended.

For our friends in the northern hemisphere it’s that time of the year – it’s warming up and there’s a holiday approaching. We thought it would be a great time to offer a special for the summer so that you have a great toolbox at your disposal for when you’re coding away on the beach.

Here’s the deal:

For the price of our WPF or Silverlight suites you can get a full Mindscape Mega Pack upgrade at no extra charge! And to save you money in the long run we’ll also add an additional six months of updates! Now that will afford you a few extra Mojitos!

So that’s every Mindscape product — WPF, Silverlight, Windows Phone, LightSpeed, SimpleDB, you name it — and 18 whole months of nightly builds, upgrades and entirely new products! All at a fraction of the price of other competing suites.

Throw on your skate shoes and roll over to the Summer Sale Page!

Providing your own drop-down list in the WPF Property Grid

Suppose you’ve got a property that you want users to edit in the WPF Elements PropertyGrid control, but rather than the user being able to enter any old rubbish you want to present them with a drop-down list of choices. One simple way to do this is to make the property an enum, but what if the list of choices isn’t known at compile time — for example, if the list comes from a database?

Well, a friend of ours has a feature request in to Microsoft for dynamic enums, where you can choose the enum values at run time, but just between you and me, I wouldn’t hold my breath for that one. In the meantime, fortunately, you can solve the problem old skool. Here’s how.

I’ve written elsewhere about the queer old dynamic pseudo-type system that lives in the System.ComponentModel cave of wonders. One of the many things you can do with this subsystem is to describe a standard set of values, even for properties or types that aren’t enums. An example of this is how in XAML you can write, say, Background=”HotPink” instead of <Button.Background><SolidColorBrush><Color R=”255″ …etc…. WPF defines a standard set of values for the Brush type so that you can specify common brushes by name, even though Brush isn’t an enum.

The secret lies in the TypeConverter class. TypeConverter, despite its name, isn’t just about converting between types. It also has a GetStandardValues() method which you can override to — you guessed it — provide a standard set of values. That standard set of values can come from anywhere, so you can make it up at runtime.

Let’s see this in action. Suppose we have a Penguin object, and we want users to be able to enter the penguin’s species, but we want to assist users by giving them a list of known species to choose from. Since new species of penguin are discovered all the time in the depths of the Amazon rainforest, we don’t want to code this up as an enum — it needs to be a string but it needs to have standard values.

Enter the TypeConverter. We have to create a class that derives from TypeConverter and overrides two methods: GetStandardValuesSupported and GetStandardValues. The first one tells the UI that there are standard values — without it, the grid will assume that there are no standard values and will just display a text box. The second tells the UI what the standard values are. Here’s the implementation:

internal class PenguinSpeciesConverter : TypeConverter
{
  public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
  {
    return true;  // required if you want standard values
  }
 
  public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
  {
    // Ignoring caching and other performance issues
    string[] species = GetSpeciesFromDatabase();
    return new StandardValuesCollection(species);
  }
}

So far so good. Now we need to specify that this type converter applies to our Penguin.Species property. If we had a separate PenguinSpecies type, we could do this at the type level, but since we’re making Species a string, that won’t work. (Technically, it is possible to associate the PenguinSpeciesConverter with the string type, but it would be a really, really bad idea, because it would affect every string in your application.) Instead, we need to specify the type converter at the property level by applying TypeConverterAttribute to the property:

public class Penguin : INotifyPropertyChanged
{
  [TypeConverter(typeof(PenguinSpeciesConverter))]  // hooks up the type converter
  public string Species { /* implementation omitted */ }
}

And this is all you need to do! You don’t need to specify a PropertyEditor in the PropertyGrid control declaration: the grid detects that there is a standard set of values for the Species property and automatically uses a drop-down instead of a text box.

What if your property was of a different type, such as Brush? That is where the convert-y bits of TypeConverter comes in. You can implement GetStandardValues() to return strings, then implement CanConvertFrom and ConvertFrom to convert those strings to the “real” type. Leave a comment if you need more info on this and I’ll try to post some more details.

Want to give it a go? The PropertyGrid control is just one of 35+ stunning controls in our WPF Elements suite. Download the trial here or get free controls here!

WPF Elements 4.0 beta is out now!

WPF Elements 4.0 beta is out!

The key focus for WPF Elements 4.0 was to include a high performance suite of charting controls to add to the existing 30+ controls. We delivered a fantastic range of charting controls for Silverlight in 2010 and had great feedback that developers wanted to see the same offered in WPF Elements.

Chart types included in WPF Elements 4.0

  • Bar
  • Line
  • Area
  • Pie
  • Doughnut
  • Bubble
  • Scatter
  • Spline
  • Spline area
  • Stacked bar
  • Stacked line
  • Stacked area
  • Stacked spline area

Of course new releases aren’t just about new controls – it’s also about improving the existing controls. We’ve added several new features to the scheduler, property grid, outlook bar and drop down edit box. New disabled visual states were added to the Office style themes as well. Bug fixes have been rolled up from the WPF Elements 3.0 nightly builds also.

This is on top of all the existing controls in the suite such as the WPF Property Grid, WPF Scheduler, Coverflow, Multicolumn TreeView and many many more.

Of course with the power of WPF you’re able to customise the look and feel of these charting controls (and in fact any control in WPF Elements) to suit your application’s design aesthetic. WPF Elements includes 5 themes to help you start out with a great look and feel.

Give it a test drive!

Currently all existing WPF Elements customers have access to the beta install bits from their account (You should see “WPF Elements 4.0 – Beta”). Betas are currently only available to customers however we expect to be shipping the final version very soon. If you’re not yet a customer but are working with WPF you should have a look at WPF Elements 3.

Screenshots

Here’s a taste of the charts that are included. They’re from the development team and include examples of custom styles. The screen shots are just a sample of what is possible and obviously don’t show off how fast and interactive the charts can be.

Custom WPF Chart Style with a stacked bar chart
A custom chart style for the stacked bar chart

WPF Bar chart with custom axis labels
Bar chart with custom axis labels

WPF Cylinder Chart
WPF cylinder chart in action

WPF bar chart with data dependant styles
WPF bar chart with data dependant styles – notice how the bars change colour depending on their value

WPF spline chart
WPF spline chart – smooth curves

WPF Stacked Area Chart
WPF stacked area charts

WPF Stacked Spline chart
Of course you can stack spline charts as well.

Logarithmic YAxis WPF chart
Axis scaling is possible, here we have a logarithmic Y axis scale

WPF Doughnut Chart
Doughnut charts – both delicious and useful for showing your data

WPF Pie Chart with partial display
The classic Pie Chart for WPF. Notice that partial pie rendering is possible, in this case one segment is not displayed.

Horizontal Stacked Bar Chart
Data does not need to be displayed vertically. Many different options exist in all charts for controlling the display of the chart data.

We’d love your feedback

As with everything we do, we love to hear our users feedback. Either post a comment below or fire something into our WPF Elements forum.

Archives

Join our mailer

You should join our newsletter! Sent monthly:

Back to Top