【问题标题】:Load a simple array to DataGrid in WPF - DataGrid shows only the length of each item在 WPF 中将简单数组加载到 DataGrid - DataGrid 仅显示每个项目的长度
【发布时间】:2018-11-21 06:11:04
【问题描述】:

根据我在网上阅读的内容,绑定到数组应该像将 DataGrid.temsSource 属性设置为指向数组一样简单,但是当我这样做时,我只会看到数组中每个项目的长度。

这就是我所拥有的......

XAML:

<Window x:Class="DataGridTesting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DataGridTesting"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid x:Name="hobbiesDataGrid" 
                  HorizontalAlignment="Left" Margin="118,84,0,0" VerticalAlignment="Top" Height="138" Width="360">
        </DataGrid>
    </Grid>
</Window>

代码背后:

namespace DataGridTesting
{
    public partial class MainWindow : Window
    {
        string[] hobbies = new string[] { "Computers", "Cars", "Photography" };

        public MainWindow()
        {
            InitializeComponent();
            this.hobbiesDataGrid.ItemsSource = hobbies;
        }
    }
}

输出:

长度
9
4
11

我期望在第一列看到的是

爱好
电脑
汽车
摄影

我错过了什么?如何在 DataGrid 的第一列正确显示数组中的项目?

【问题讨论】:

  • 有一个solution here 应该可以帮助并解释为什么会发生这种情况

标签: c# wpf


【解决方案1】:

您需要将网格设置为不自动生成列,因为数组中没有上下文。

    <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" HorizontalAlignment="Left" VerticalAlignment="Top" Height="128" Width="273" Margin="76,94,0,0" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Hobbies" Binding="{Binding}" />
        </DataGrid.Columns>
    </DataGrid>

还要注意 ItemsSource 设置为 binding,Binding 设置在 DataGridTextColumn 中。

【讨论】:

  • 仅供参考 - 如果您连续使用双击事件,请使用 Binding="{Binding Path=.}"
【解决方案2】:

不能直接使用字符串数组。

检查以下代码:

        DataTable hobbies = new DataTable();
        hobbies.Columns.Add("hobbies");

        hobbies.Rows.Add(new object[] { "Computers" });
        hobbies.Rows.Add(new object[] { "Cars" });
        hobbies.Rows.Add(new object[] { "Photography" });

然后像以前一样使用它:

        this.hobbiesDataGrid.ItemsSource = hobbies;

这里都有解释:http://www.psworld.pl/Programming/BindingListOfString

【讨论】:

  • 很高兴它很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2011-06-07
相关资源
最近更新 更多