数据网格单元格为空,但行数正确

本文关键字:数据网 网格 单元格 数据 | 更新日期: 2023-09-27 18:26:32

我有一个DataGrid,可以用正确数量的行填充,但实际的单元格是空白的。我正在尝试将枚举的值绑定到数据网格。

我读过很多关于属性和字段是造成这种情况的原因的文章,但据我所知,我正在像它们一样做,但仍然没有取得任何进展。

有人能给我指正确的方向吗?

class logLevelString {  
    public logLevelString(string nameParam) { 
        this.name = nameParam;
    }
    string name { get; set;}
}

private void UserControl_Loaded (object sender, RoutedEventArgs e) { 
    List<logLevelString> strings = new List<logLevelString>();
    List<String> logLevels = Enum.GetNames(typeof(ISysEvent.eventLogLevel)).ToList();
    foreach (string currentString in logLevels) {  
        strings.Add(new logLevelString(currentString));
    }
    dgEventViewerOptions.ItemsSource = strings;
}

我是否也必须提到xaml文件中的ItemsSource?如果是,我该如何引用它?

我还是WPF的新手,有很多事情需要我去思考!

Xaml代码:

<UserControl x:Class="WRMS_BaseLibraryUI.UI_UserControl.WDL_Event.ucEventViewerOptions"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DesignHeight="297" d:DesignWidth="215" Loaded="UserControl_Loaded">
<Grid>
    <DataGrid AutoGenerateColumns="False" Name="dgEventViewerOptions" RowHeight="15"     FontSize="11" />
    <Label Content="Data:" Height="28" HorizontalAlignment="Left" Margin="12,92,0,0" Name="lblDataSearch" VerticalAlignment="Top" Width="200" MinWidth="200" />
    <TextBox Height="22" HorizontalAlignment="Left" Margin="5,116,0,159" Name="txtDataSearch" Width="200" MinWidth="200" />
    <Label Content="Text:" Height="28" HorizontalAlignment="Left" Margin="12,139,0,0" Name="lblTextSearch" VerticalAlignment="Top" Width="200" MinWidth="200" />
    <TextBox Height="22" HorizontalAlignment="Left" Margin="5,164,0,0" Name="txtTextSearch" VerticalAlignment="Top" Width="200" MinWidth="200" />
    <Button Content="Search" Margin="12,241,12,12" Name="btnSearch" Click="btnSearch_Click" />
</Grid>
</UserControl>

数据网格单元格为空,但行数正确

首先,您必须将name属性公开,而不是在DataGrid上设置AutoGenerateColumns="False"。然后,您还应该遵循广泛接受的编码规则,并对类和属性名等公共标识符使用Pascal大小写:

class LogLevel
{
    public LogLevel(string name)
    {
        Name = name;
    }
    public string Name { get; set; }
}

现在,您可以简化创建数据项的代码:

using System.Linq;
...
var names = Enum.GetNames(typeof(ISysEvent.eventLogLevel));
var levels = names.Select(n => new LogLevel(n));
dgEventViewerOptions.ItemsSource = levels;

也就是说,仍然没有涉及数据绑定(除了DataGrid内部完成的绑定)。为了使用数据绑定,您必须创建一个具有返回LogLevel对象集合的公共属性的视图模型类,并将DataGrid的ItemsSource绑定到该属性(在XAML中)。

开始阅读MSDN上的数据绑定概述文章。