2014-11-05 199 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

你在字典中存儲什麼類型? – 2014-11-05 22:39:45

+0

我正在存儲IDictionary ...我實際上使用Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User)的返回 – bertZ 2014-11-05 22:45:17

+0

XAML添加了...我最近加入了開發團隊,他們根本沒有使用任何數據源list/grid ...我只是這樣保持它,因爲他們這樣做。 :( – bertZ 2014-11-05 23:19:06

回答

2

A ListView(以及其他所有控件)將在給定要顯示的對象時顯示調用ToString的結果。

對於標準類,這是它的限定名稱;在你的例子Project.Views.Row。

有兩種方法來解決這個問題:

  1. 不要添加的對象。

    list1.Items.Add(String.Format({0}:{1}, row.Name1, row.Name2)); 
    
  2. 這個做正確方式使用MVVM:相反,只要你想它IE格式的字符串。在這種情況下,您的XAML需要一個數據模板:

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

    對於網格視圖:

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

綁定ItemsSource實際上必要的,但由於我們正在盡一切的權利方式,你應該這樣做,所以你不直接從代碼操縱UI。

+0

@LucasBertone沒問題。我沒有對綁定系統給出一個非常詳細的解釋,所以一定要用WPF閱讀MVVM;你會更好地理解如何生成這個。 – BradleyDotNET 2014-11-05 23:28:03

+0

是啊...我會對它進行適當的觀察,下一次做所有事情:D – bertZ 2014-11-05 23:30:17