如果我有viewmodel属性
public (string Mdf, string MdfPath) MachineDefinition { get; set; }我试图在XAML / WPF中绑定到它
<Label Content="{Binding Path=MachineDefinition.Item2}" />或
<Label Content="{Binding Path=MachineDefinition.MdfPath}" />我也犯了同样的错误

我看到ValueTuple字段实际上是字段而不是属性。这就是问题所在吗?
发布于 2017-04-04 13:44:45
混淆之处在于,对于旧式元组( C#7前),所有的项目都是属性。
https://msdn.microsoft.com/en-us/library/dd386940(v=vs.110).aspx
因此是可以绑定的。对于ValueTuple,它们是字段
而且不能绑定。
如果你谷歌"WPF元组绑定“,你会得到大量的假阳性,因为旧的样式元组是可绑定的,但新的不是。
发布于 2017-07-12 17:31:15
您可以尝试实现一个值转换器。举个例子..。
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}" />希望这能有所帮助。
发布于 2017-04-04 13:41:21
MdfPath方法永远不会起作用,因为名称部分在实际存在的位置上是非常有限的。本质上,它是纯粹的编译器巫毒,在类型模型中不存在,这意味着任何与类型模型(包括反射、UI工具、序列化程序等)对话的东西都只会看到Item1、Item2名称,而不是假名称。
https://stackoverflow.com/questions/43208852
复制相似问题