2014-11-05 7 views
1

2 열 ListView가 있고 다음 코드를 사용하여 IDictionary 및 채우기 위해 노력하고있어.WPF - ListView 채우기

System.Collections.IDictionary entryList = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User); 

foreach (System.Collections.DictionaryEntry de in entryList) 
{ 
    Row row = new Row(); 
    row.Name1 = (string)de.Key; 
    row.Name2 = (string)de.Value; 
    this.list1.Items.Add(row); 
} 

public class Row 
{ 
    public string Name1 { get; set; } 
    public string Name2 { get; set; } 
} 

XAML :

<ListView x:Name="varList" 
    Grid.ColumnSpan="1" 
    HorizontalAlignment="Left" 
    VerticalAlignment="Top" 
    Height="400" 
    Width="500" 
    Margin="0, 30, 0, 0"> 

    <ListView.View> 
     <GridView> 
      <GridViewColumn Width="150" Header="Name" /> 
      <GridViewColumn Width="350" Header="Path" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

그러나 모든 행과 열이 "Project.Views.Row"로 채워집니다. 누구든지 문제를 해결하는 방법에 대해 알고 있습니까? 고맙습니다.

+0

사전에 어떤 유형을 저장하고 있습니까? –

+0

IDictionary를 저장하고 있습니다 ... Environment.GetEnvironmentVariables (EnvironmentVariableTarget.User) – bertZ

+0

XAML이 추가되었습니다 ... 최근 dev 팀에 합류했으며 어떤 데이터 소스도 전혀 사용하지 않았습니다. list/grid ... 나는 이런 식으로 일을했기 때문에이 방법을 사용했다. : – bertZ

답변

2

ListView (및 기타 모든 컨트롤)은 ToString이라는 결과를 표시 할 개체가 표시 될 때 표시합니다.

표준 클래스의 경우 정규화 된 이름입니다. Project.Views.Row 귀하의 예제입니다.

  1. 개체를 추가하지 마십시오

    는이 문제를 해결하는 방법은 두 가지가 있습니다.

    list1.Items.Add(String.Format({0}:{1}, row.Name1, row.Name2)); 
    
  2. 이에게 바로 방법을 수행하고 MVVM을 사용 : 당신이 즉, 원하는 대신 문자열을 포맷합니다.

    <ListView.View> 
        <GridView> 
         <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name1}" /> 
         <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Name2}"/> 
        </GridView> 
    </ListView.View> 
    

바인딩 ItemsSource 실제로 필요는 없지만, 우리는 바로 모든 일을하기 때문에 : 그리드 뷰를 들어

<ListView ItemsSource="{Binding Rows}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name1}"/> 
       <TextBlock Text="{Binding Name2}"/> 
      </StackPanel> 
     </DataTemplate> 
    <ListView.ItemTemplate> 
</ListView> 

이 경우 귀하의 XAML은 데이터 템플릿을 필요로 그런데 코드에서 직접 UI를 조작하지 않도록해야합니다.

+0

@LucasBertone 문제 없습니다. 바인딩 시스템에 대한 철저한 설명을하지 않았으므로 WPVM을 사용하여 MVVM을 읽어야합니다. 이것을 생성하는 방법에 대해 훨씬 더 잘 이해하게 될 것입니다. – BradleyDotNET

+0

그래 ... 나는 그것을 올바르게 살펴보고 다음 번에 모든 것을 올바르게 할 것이다. D – bertZ