<Window x:Class="WpfApp4.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:WpfApp4"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ListView x:Name="listView1" ItemsSource="{Binding}" >
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=BookId}"></GridViewColumn>
<GridViewColumn Header="Title" DisplayMemberBinding="{Binding Path=Title}"></GridViewColumn>
<GridViewColumn Header="Publisher" DisplayMemberBinding="{Binding Path=Publisher}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp4
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private BooksService booksService = new BooksService();
public IEnumerable<Book> Books;
public MainWindow()
{
InitializeComponent();
booksService.RefreshBooks();
Books = booksService.Books;
listView1.ItemsSource = Books;
}
}
public abstract class BindableBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public virtual bool Set<T>(ref T item, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(item, value)) return false;
item = value;
OnPropertyChanged(propertyName);
return true;
}
protected virtual void OnPropertyChanged(string propertyName) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public class Book : BindableBase
{
public Book(int id, string title, string publisher, params string[] authors)
{
BookId = id;
Title = title;
Publisher = publisher;
Authors = authors;
}
public int BookId { get; }
private string _title;
public string Title
{
get => _title;
set => Set(ref _title, value);
}
private string _publisher;
public string Publisher
{
get => _publisher;
set => Set(ref _publisher, value);
}
public IEnumerable<string> Authors { get; }
public override string ToString() => Title;
}
public class SampleBooksService
{
public IEnumerable<Book> GetSampleBooks() =>
new List<Book>()
{
new Book(1, "Professional C# 7 and .NET Core 2", "Wrox Press", "Christian Nagel"),
new Book(2, "Professional C# 6 and .NET Core 1.0", "Wrox Press", "Christian Nagel"),
new Book(3, "Professional C# 5.0 and .NET 4.5.1", "Wrox Press", "Christian Nagel", "Jay Glynn", "Morgan Skinner"),
new Book(4, "Enterprise Services with the .NET Framework", "AWL", "Christian Nagel")
};
}
public class BooksService
{
private ObservableCollection<Book> _books = new ObservableCollection<Book>();
public void RefreshBooks()
{
_books.Clear();
var sampleBooksService = new SampleBooksService();
var books = sampleBooksService.GetSampleBooks();
foreach (var book in books)
{
_books.Add(book);
}
}
public Book GetBook(int bookId) =>
_books.Where(b => b.BookId == bookId).SingleOrDefault();
public void AddBook(Book book) => _books.Add(book);
public IEnumerable<Book> Books => _books;
}
}