Debugging Data Binding

You may have noticed that our age text box's binding options have gotten fairly involved:

Foreground="{Binding Path=Age,

Source={StaticResource Tom}, Converter={StaticResource ageConverter}}" ToolTip="{Binding RelativeSource={RelativeSource Self},

Path=(Validation.Errors)[0].ErrorContent}">

<TextBox.Text>

<Binding Path="Age" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules>

<local:NumberRangeRule Min="0" Max="128" /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>

There's a lot going on here and it would be easy to get some of it wrong. For example, if we had a background in journalism, we might have used one-based indexing instead of zero-based indexing to access the first error in our list of validation errors when setting up the binding for the tool tip:

ToolTip="{Binding RelativeSource={RelativeSource Self},

Path=(Validation.Errors)[1].ErrorContent}">

In this case, as in most others, the WPF data binding engine will simply swallow the error so as not to disturb our user friends.* So, how are we to find it? Well, you need only check the debug output to see the error shown in Example 6-30, and all will be revealed.

* The swallowing of errors like these lets us declare data bindings before the data is actually available, simplifying our programming chores considerably in this area.

Example 6-30. Watch debug output for help debugging data binding problems

System.Windows.Data Error: 12 : Cannot get '' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection'1').

BindingExpression:Path=(0).[1].ErrorContent; DataItem='TextBox' (Name='ageTextBox'); target element is 'TextBox' (Name='ageTextBox'); target property is 'ToolTip' (type 'Object') TargetInvocationException: 'System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —>

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

In this case, we can see that the index is out of range, giving us a clue as to how to fix it. The data binding debug output provides all kinds of helpful hints like this, and you should check it if eyeballing your data binding expressions doesn't yield the source of the issue.*

Was this article helpful?

0 0
Project Management Made Easy

Project Management Made Easy

What you need to know about… Project Management Made Easy! Project management consists of more than just a large building project and can encompass small projects as well. No matter what the size of your project, you need to have some sort of project management. How you manage your project has everything to do with its outcome.

Get My Free Ebook


Post a comment