将列表中的项目显示在gridview中的列上

时间:2011-08-26 05:27:11

标签: c# wpf listviewitem gridviewcolumn

我试图在列表框中显示文件的名称和路径。例如,名称应位于“文件路径”下的“头文件名”和路径下。我不想绑定到任何xmls,因为我有一个代码来显示文件名和大小。我是新手,我不知道如何去做。谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定如何在没有看到您尝试绑定的数据的任何代码或结构的情况下帮助您,但我会试一试。

假设您正在尝试绑定C:\ MyFolder目录中文件的名称和路径,并且您的网格视图的名称为grd_MyGrid:

string[] myFiles = Directory.GetFiles("C:\\MyFolder\\");

var files = from f in myFiles
                        select new{
                                    FileName =Path.GetFileName(f),
                                    FilePath = Path.GetPathRoot(f)
                                  };

grd_MyGrid.DataSource=files;

为了使其正常工作,您必须引用System.Linq。

希望这有帮助。

答案 1 :(得分:0)

为了让你开始,我将提供一些代码,但你真的应该阅读至少一些基础知识,当谈到XAML和WPF以用于未来的开发任务时。

如果你没有ListBox,我建议使用DataGrid(在.Net 4.0中 - 或在WPF Toolkit on CodePlex中)。在想要在网格或报表中显示数据的情况下,DataGrid更易于使用。

要在XAML中创建DataGrid,您可以使用以下代码(在.net 4中)

<DataGrid HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding Path=ItemsToDisplay}" IsReadOnly="True" AutoGenerateColumns="True" />

这将创建一个简单的DataGrid对象供您在屏幕上显示。由于AutoGenerateColumns已设置为true,因此控件会自动为您创建列。

您可能还注意到我设置了ItemsSource属性,这是DataGrid将从中获取项目的属性。

要在页面代码隐藏文件中定义它,您将能够执行以下操作:

public System.Collections.ObjectModel.ObservableCollection<Item> ItemsToDisplay { get; private set; }

注意代码隐藏中的属性名称如何与DataGrid上的Binding中的属性名称相匹配。这是View(页面文件)链接到ViewModel(代码隐藏)

的方式

要测试它,请创建一个简单的测试类,并使用项目填充ItemsToDisplay集合。

例如:

在我的MainWindow.xaml.cs文件中

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        ItemsToDisplay = new System.Collections.ObjectModel.ObservableCollection<Item>();

        ItemsToDisplay.Add(new Item("Homer", 45));
        ItemsToDisplay.Add(new Item("Marge", 42));
        ItemsToDisplay.Add(new Item("Bart", 10));
        ItemsToDisplay.Add(new Item("Lisa", 8));
        ItemsToDisplay.Add(new Item("Maggie", 2));
    }

    public System.Collections.ObjectModel.ObservableCollection<Item> ItemsToDisplay { get; private set; }
}

public class Item
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    public Item(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

在我的MainWindow.xaml文件中:

<Window x:Class="Stackoverflow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding Path=ItemsToDisplay}" AutoGenerateColumns="True" IsReadOnly="True" />
    </Grid>
</Window>

看起来像:

enter image description here