WPF:将DataGrid绑定到List<String>

26
有趣的是,有时候一些简单的事情会让我措手不及。
我可以使用DataGridTextColumn将DataGrid与某个任意类的集合进行良好绑定,就像这样:
// bound to List<Class>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>

现在我想将一个简单的字符串集合绑定到DataGrid。由于没有要绑定的“Name”属性或类似的内容,我该如何编写绑定代码:

// bound to List<String>
<DataGridTextColumn Header="Name" Binding="{Binding ???}"/>

字符串没有“Value”等属性。如果我只写{Binding},那么就会得到单向绑定,无法将更改写回到集合中。

思考了一下,我认为不能直接绑定到集合,所以我需要将我的字符串包装到一个类中?
或者有其他方法吗?

1个回答

39

您可以使用以下绑定使其运行:

Binding="{Binding Path=.}

但这并不会解决你的问题,因为字符串是引用类型且是不可变的,这意味着你不能更改你所绑定到用户界面的字符串引用。

因此,你的想法是正确的,你需要将这些字符串包装在对象中,使用 Binding 的 path 属性并将这些对象提供给你的 DataGrid。

public class StringWrapper
{
    public string Value { get; set; }
}

但是为什么包装器起作用呢?我们仍然绑定到一个字符串,对吧? - wingerse
1
不是的。你绑定的是一个包含字符串的对象。这就是区别所在。 - Arcturus
5
我现在明白了。绑定无法改变绑定的引用,它只能改变属性。现在有意义了。非常感谢。 - wingerse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接