2014-10-15 2 views
0

정확한 행을 채울 수있는 DataGrid가 있지만 실제 셀은 비어 있습니다. 열거 형의 값을 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> 
+0

xaml 코드도 함께 표시해야합니다. 목록을 사용자의 컨트롤에 바인딩하는 위치를 알려주십시오. 또한 Visual Studio의 출력 창에서 바인딩 오류를 확인할 수 있습니다. – user3596113

+0

이 추가되면 관련 출력 창에서 아무 것도 볼 수 없습니다. 컨트롤 바인딩 목록에 관련이 줄 "dgEventOptions.ItemsSource = strings;"완료되지 않은? – user2248441

답변

0

, 당신은 name 재산을 공개하고, 데이터 그리드에 AutoGenerateColumns="False"를 설정하지해야합니다. 그럼 당신은 널리 코딩 규칙 받아 들여 클래스와 특성 이름과 같은 공공 식별자 파스칼 케이싱을 사용 따라야합니다

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

dgEventViewerOptions.ItemsSource = levels; 

:

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

    public string Name { get; set; } 
} 

지금 당신은 당신의 데이터 항목을 생성하는 코드를 단순화 할 수

즉, DataGrid에서 내부적으로 수행 한 바인딩을 제외하고는 여전히 데이터 바인딩이 필요하지 않습니다. 데이터 바인딩을 사용하려면 LogLevel 객체 컬렉션을 반환하는 public 속성을 사용하여 뷰 모델 클래스를 만들고 DataGrid의 ItemsSource을 해당 속성에 바인딩 (XAML)해야합니다.

MSDN에서 Data Binding Overview 문서를 읽기 시작하십시오.

관련 문제