WPF DataGrid 绑定到 string.Length 而不是字符串文本

Posted

技术标签:

【中文标题】WPF DataGrid 绑定到 string.Length 而不是字符串文本【英文标题】:WPF DataGrid binds to string.Length instead of string text 【发布时间】:2014-10-22 18:38:54 【问题描述】:

我是 WPF 的新手,我真的想尽可能多地自己弄清楚...

我已经创建了我的第一个 DataGrid 控件,我正在尝试使用如下字符串列表填充它:

<UserControl x:Class="DataGridTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Style="StaticResource ContentRoot">
        <DataGrid Name="MyDataGrid" ItemsSource="Binding" HorizontalAlignment="Stretch" Height="500"/>
    </Grid>
</UserControl>

Private Sub DataGridTest_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Dim StringCollection As List(Of String) = New List(Of String)
        StringCollection.Add("Test")
        StringCollection.Add("Test1")
        StringCollection.Add("Test2")
        StringCollection.Add("Test3")
        StringCollection.Add("Test4")
        MyDataGrid.DataContext = StringCollection

    End Sub

但是,它实际上填充了标题“长度”和值作为字符串的长度。为什么它本身不填充字符串值?

很明显,我在这里遗漏了一些基本的东西,但我终生无法弄清楚它是什么。

提前致谢!

【问题讨论】:

【参考方案1】:

因为DataGrid 默认情况下会从给定的项目类中自动生成列,所以它会在String 类中搜索可以转换为列的属性。您可以通过创建自己的专栏并关闭 AutoGenerateColumns

来避免这种情况
<DataGrid Name="MyDataGrid" ItemsSource="Binding" ... AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="Binding" Header="Something"/>
    </DataGrid.Columns>
</DataGrid>

【讨论】:

或者只对一列字符串使用ListBox - 除非您需要标题或特殊内容。 @lc。或使用ListBox,但不清楚OP是否想要编辑项目,因为如果你需要ItemTemplate或简单的DisplayMemberPath就足够了,也不清楚OP是否需要列标题。 谢谢,这很有意义。我正在使用上面的代码进行学习练习 - 最终控件将用于编辑。

以上是关于WPF DataGrid 绑定到 string.Length 而不是字符串文本的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid中的WPF绑定到DataContext

WPF:将 DataGrid 绑定到 List<String>

WPF DataGrid 绑定到List集合

将按钮绑定到 DataGrid WPF 中的对象

将datagrid WPF绑定到带有列表的两个不同类?

如何将 List<CustomObject> 绑定到 WPF DataGrid?