数据网格单元格为空,但行数正确
本文关键字:数据网 网格 单元格 数据 | 更新日期: 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上的数据绑定概述文章。