首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用ValueTuple绑定到WPF中的ValueTuple字段?

是否可以使用ValueTuple绑定到WPF中的ValueTuple字段?
EN

Stack Overflow用户
提问于 2017-04-04 13:36:22
回答 3查看 12K关注 0票数 25

如果我有viewmodel属性

代码语言:javascript
复制
public (string Mdf, string MdfPath) MachineDefinition { get; set; }

我试图在XAML / WPF中绑定到它

代码语言:javascript
复制
<Label Content="{Binding Path=MachineDefinition.Item2}" />

代码语言:javascript
复制
<Label  Content="{Binding Path=MachineDefinition.MdfPath}" />

我也犯了同样的错误

我看到ValueTuple字段实际上是字段而不是属性。这就是问题所在吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-04 13:44:45

混淆之处在于,对于旧式元组( C#7前),所有的项目都是属性。

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

因此是可以绑定的。对于ValueTuple,它们是字段

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

而且不能绑定。

如果你谷歌"WPF元组绑定“,你会得到大量的假阳性,因为旧的样式元组是可绑定的,但新的不是。

票数 42
EN

Stack Overflow用户

发布于 2017-07-12 17:31:15

您可以尝试实现一个值转换器。举个例子..。

代码语言:javascript
复制
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}" />

希望这能有所帮助。

票数 11
EN

Stack Overflow用户

发布于 2017-04-04 13:41:21

MdfPath方法永远不会起作用,因为名称部分在实际存在的位置上是非常有限的。本质上,它是纯粹的编译器巫毒,在类型模型中不存在,这意味着任何与类型模型(包括反射、UI工具、序列化程序等)对话的东西都只会看到Item1Item2名称,而不是假名称。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43208852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档