Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Textblock TargetNullValue not working?

I have a wpf textblock as below:

<TextBlock Text="{Binding [someViewModel].SomeVar.SomeSubVar.Name, 
                          TargetNullValue='-'}"/>

At my viewmodel side, I'll have my own logic that in the end, SomeVar.SomeSubVar will be null.

If I want to show a default value for this TextBlock I know I can declare and initiate SomeVar.SomeSubVar and assign default value into SomeVar.SomeSubVar.Name but I would like to use TargetNullValue instead. May I know which part is wrong?

like image 402
SuicideSheep Avatar asked Mar 11 '14 03:03

SuicideSheep


2 Answers

You might look at using FallbackValue http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue(v=vs.110).aspx in conjunction with TargetNullValue.

In order for TargetNullValue to work you must be able to evaluate the full path of [someViewModel].SomeVar.SomeSubVar.Name to null. If 'someViewModel', 'SomeVar', or 'SomeSubVar' are null then 'Name' can never be evaluated, and TargetNullValue won't apply.

like image 128
Shawn Rakowski Avatar answered Nov 19 '22 17:11

Shawn Rakowski


The Binding's TargetNullValue property is displayed in the TextBlock if the [somveViewModel].SomeVar.SomeSubVar.Name property is null. It doesn't cane the value of the [somveViewModel].SomeVar.SomeSubVar.Name property. It effectively sets up an equivalency between null and the TargetNullValue property's value.

See this question for a good explanation.

So my advice is if you want to have a non-null default value, you need to set it in the view model.

like image 40
Tony Vitabile Avatar answered Nov 19 '22 18:11

Tony Vitabile