Is it possible to bind to a ValueTuple field in WPF with C#7

bradgonesurfing picture bradgonesurfing · Apr 4, 2017 · Viewed 9.4k times · Source

If I have a viewmodel property

public (string Mdf, string MdfPath) MachineDefinition { get; set; }

and I try to bind to it in XAML / WPF

<Label Content="{Binding Path=MachineDefinition.Item2}" />

or

<Label  Content="{Binding Path=MachineDefinition.MdfPath}" />

I get the same error

enter image description here

I see that ValueTuple fields are really fields not properties. Is this the problem?

Answer

bradgonesurfing picture bradgonesurfing · Apr 4, 2017

The confusion is that for old style Tuple ( pre C#7 ) all the Items were properties

https://msdn.microsoft.com/en-us/library/dd386940(v=vs.110).aspx

and thus bindable. For ValueTuple they are fields

https://github.com/dotnet/runtime/blob/5ee73c3452cae931d6be99e8f6b1cd47d22d69e8/src/libraries/System.Private.CoreLib/src/System/ValueTuple.cs#L269

and not bindable.

If you google "WPF Tuple Binding" you get loads of false positives because old style tuples are bindable but the new ones are not.