Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-填充列表视图_C#_Listview_Add - Fatal编程技术网

C# WPF-填充列表视图

C# WPF-填充列表视图,c#,listview,add,C#,Listview,Add,我有一个2列的ListView,我正在尝试使用和IDictionary用以下代码填充它 System.Collections.IDictionary entryList = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User); foreach (System.Collections.DictionaryEntry de in entryList) { Row row = new Row(); r

我有一个2列的ListView,我正在尝试使用和IDictionary用以下代码填充它

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:


但是每一行和每一列都被“Project.Views.row”填满。 有人知道怎么修吗?非常感谢。

当给定要显示的对象时,一个
列表视图(以及与此相关的所有其他控件)将显示调用
ToString
的结果

对于标准类,这是它的限定名称;示例中的Project.Views.Row

有两种方法可以解决此问题:

  • 不要添加对象。相反,请根据需要格式化字符串,即:

    list1.Items.Add(String.Format({0}:{1}, row.Name1, row.Name2));
    
  • 使用正确的方法并使用MVVM。在这种情况下,您的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。

    您在字典中存储的是什么类型?我正在存储一个IDictionary。。。我实际上是在使用返回的Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User)XAML添加。。。我最近加入了开发团队,他们没有在任何列表/网格上使用任何数据源。。。我只是保持这种方式,因为他们是这样做的(@LucasBertone他们做错了。在你的团队中永远成为变革的力量!:)@BradleyDotNET正在努力:D@LucasBertone没问题。我没有对绑定系统给出非常透彻的解释,所以请务必阅读关于带WPF的MVVM的内容;你会更好地理解如何生成这个。是的。。。我会仔细研究一下,下次把一切都做好
     <ListView.View>
        <GridView>
           <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name1}" />
           <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Name2}"/>
        </GridView>
     </ListView.View>