2014-10-15 3 views
0

У меня есть DataGrid, который я могу заполнить с правильным количеством строк, но фактические ячейки пустые. Я пытаюсь связать значения enum с 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; 
} 

Должен ли я указывать источник Items в файле xaml? Если да, то как мне это сделать?

Я все еще очень новичок в 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

вам также нужно указать свой код xaml. Покажите нам, где вы привязываете свой список к своему контролю. Также вы можете проверить окно вывода в visual studio для ошибок привязки. – user3596113

+0

добавил, ничего не видно в окне вывода, относящемся к этому. Относительно привязки списка к элементу управления, не выполняется ли в этой строке «dgEventOptions.ItemsSource = stringings»? – user2248441

ответ

0

Во-первых, вы должны сделать name собственности общественности, а не установить AutoGenerateColumns="False" на DataGrid. Затем вы должны также следовать широко приняты правила кодирования и использовать 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 и привязать (в XAML) DataGrid's ItemsSource к этому свойству.

Начните читать статью Data Binding Overview на MSDN.

Смежные вопросы