Datagrid单元格为空但行数正确

时间:2014-10-15 11:33:44

标签: c# wpf datagrid

我有一个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>

1 个答案:

答案 0 :(得分:0)

首先,您必须公开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上的Data Binding Overview文章。