Отображение элементов из списка в столбце в виде сетки - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь отобразить имя и путь к файлу в списке.Например, имя должно указываться в заголовке FileName, а путь в FilePath.Я не хочу связываться с какими-либо xmls, так как у меня есть код для отображения имени и размера файла. Я новичок в этом, и я не уверен, как это сделать.Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Для начала я приведу некоторый код, но вы действительно должны прочитать хотя бы некоторые из основ, когда речь идет о XAML и WPF для будущих задач разработки.

Если вы можете обойтись безListBox, я бы предложил использовать DataGrid (в .Net 4.0 - или в WPF Toolkit на CodePlex ).DataGrid проще использовать в ситуациях, когда вы хотите отобразить данные в виде таблицы или отчета.

Чтобы создать DataGrid в XAML, вы можете использовать следующий код (в .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; }

Обратите внимание, какимя свойства в выделенном фрагменте кода совпадает с именем свойства в привязке в сетке данных.Вот как View (файл страницы) связывается с ViewModel (code-behind)

Чтобы проверить его, создайте простой тестовый класс и заполните коллекцию 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

0 голосов
/ 26 августа 2011

Я не уверен, как помочь вам, не видя ни кода, ни структуры данных, которые вы пытаетесь связать, но я попробую.

Допустим, вы пытаетесь связать имена и пути к файлам в каталоге 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.

Надеюсь, это поможет.

...