我有一个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>
答案 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文章。