我有一个带有属性的类,该属性包含一个自定义对象的列表。
// MySongs.cs
public class MySongs
{
public List<Song> Songs = new List<Song>();
}
MainWindow()中将填充Songs属性。
// MainWindow.xaml.cs
MySongs.Songs.Add(new Song("Hey Jude", "The Beatles"));
如何在以标题和艺术家作为标题的DataGrid中显示 MySongs.Songs 列表?
谢谢!
修改(10/27):
这是 MainWindow.xaml 中的XAML:
<Window x:Class="MySongsUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MySongsUI"
mc:Ignorable="d"
Title="My Songs" Height="450" Width="800">
<Grid>
<!-- DataGrid with Songs -->
<DataGrid x:Name="songsDataGrid" />
</Grid>
</Window>
这是 MySongs.cs 中的C#:
using System.Collections.Generic;
using System.Linq;
using System.Collections.ObjectModel;
namespace MySongsUI
{
public static class MySongs
{
public static ObservableCollection<Song> Songs = new ObservableCollection<Song>();
}
}
这是 Song.cs 中的C#:
namespace MySongsUI
{
public class Song
{
public string Title { get; set; }
public string Artist { get; set; }
// CONSTRUCTOR
public Song(string title, string artist)
{
Title = title;
Artist = artist;
}
}
}
我想我不确定使 MySongs 类在 MainWindow.xaml 的XAML中被识别的最佳方法,因此我可以将其绑定到DataGrid
谢谢!
答案 0 :(得分:1)
这是一个非常简单的示例代码,它将根据Song类的属性自动生成所有列:
<DataGrid ItemsSource="{Binding MySongs}" AutoGenerateColumns="True">
</DataGrid >
如果要自定义任何内容,则需要对其进行样式设置。
如果要在运行时进行更改,请不要忘记将列表设置为ObservableCollection,并将Song类设置为从NotificationObject继承。
希望这会有所帮助。
编辑:
这是它的外观:
MainWindlow:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<local:MainView />
</Window>
MainView.xaml.cs:
public MainView()
{
DataContext = new MainViewModel();
InitializeComponent();
}
MainView.xaml:
<DataGrid ItemsSource="{Binding local:MySongs.Songs}" AutoGenerateColumns="True">
</DataGrid >
MainViewModel.cs:
public class MainViewModel
{
public MySongs MySongs { get; set; }
public MainViewModel()
{
MySongs = new MySongs()
{
Songs = new ObservableCollection<Song>()
{
new Song("Hey Jude", "The Beatles")
}
};
}
}
您将必须在MainViewModel,Song和MySongs上实现INotifyPropertyChanged,以支持数据的运行时更改。