Si tengo una propiedad de modelo de vista
public (string Mdf, string MdfPath) MachineDefinition { get; set; }y trato de enlazarlo en XAML / WPF
<Label Content="{Binding Path=MachineDefinition.Item2}" />o
<Label Content="{Binding Path=MachineDefinition.MdfPath}" />Me sale el mismo error
Veo que los campos de ValueTuple son realmente campos, no propiedades . ¿Es este el problema?
La confusión es que para Tuple de estilo antiguo (pre C # 7) todos los elementos eran propiedades
https://msdn.microsoft.com/en-us/library/dd386940(v=vs.110).aspx
y por lo tanto vinculante. Para ValueTuple son campos
y no vinculante.
Si busca en Google "WPF Tuple Binding" , obtendrá un montón de falsos positivos porque las tuplas de estilo antiguo se pueden vincular, pero las nuevas no.
Algo que podría intentar es implementar un convertidor de valor. Aquí hay un ejemplo...
public class TupleDisplayNameConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var tuple = value as (Int32 Id, String Name)?; if (tuple == null) return null; return tuple.Value.Name; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotSupportedException(); } } <TextBlock Text="{Binding Converter={StaticResource TupleDisplayNameConverter}, Mode=OneWay}" />Espero que esto ayude.
El enfoque MdfPath nunca funcionará, ya que la parte del nombre es muy restrictiva en términos de dónde existe realmente. Esencialmente, es vudú de compilador puro y no existe en el modelo de tipo, lo que significa que cualquier cosa que hable con el modelo de tipo (que incluye reflexión, herramientas de interfaz de usuario, serializadores, etc.) solo verá los nombres Item1 , Item2 ; no los nombres falsos.