リストボックスにファイルの名前とパスを表示しようとしています。たとえば、名前はヘッダーFileNameの下に、パスはFilePathの下にある必要があります。ファイル名とサイズを表示するコードがあるので、xmlにバインドしたくありません。これは初めてで、これを実行する方法がわかりません。ありがとう!
2 に答える
あなたがバインドしようとしているコードやデータの構造を見ずにあなたを助ける方法はわかりませんが、試してみます.
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 を参照する必要があります。
お役に立てれば。
最初にいくつかのコードを提供しますが、将来の開発タスクのために XAML と WPF に関しては、少なくともいくつかの基本を読んでおく必要があります。
ListBox なしで実行できる場合は、DataGrid
(.Net 4.0 またはCodePlex の WPF Toolkit で) を使用することをお勧めします。グリッドまたはレポートにデータを表示する場合は、DataGrid を使用する方が簡単です。
XAML で DataGrid を作成するには、次のコードを使用できます (.net 4)
<DataGrid HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding Path=ItemsToDisplay}" IsReadOnly="True" AutoGenerateColumns="True" />
DataGrid
これにより、画面に表示する単純なオブジェクトが作成されます。が true に設定されているためAutoGenerateColumns
、列はコントロールによって自動的に作成されます。
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>
次のようになります。