Привязка к коллекции

Построим приложение для просмотра и редактирования данных, описанных выше. Используем возможности привязки. В левой части окна разместим ListBox, установив его свойство DisplayMemberPath. Заполнение ListBox выполним в коде. В правой части окна расположим текстовые поля для редактирования выбранного элемента списка и кнопку для добавления элемента. Обратите внимание, как в разметке задана привязка к выбранному элементу списка.

<Window x:Class="WpfLists.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Width="400" Height="220" Title="WPF Lists">

<StackPanel Orientation="Horizontal">

<ListBox Name="lst" DisplayMemberPath="Name" Width="200" />

<Grid Margin="5" Width="170"

DataContext="{Binding SelectedItem, ElementName=lst}">

<Grid.ColumnDefinitions>

<ColumnDefinition Width="Auto" />

<ColumnDefinition Width="7" />

<ColumnDefinition Width="*" />

</Grid.ColumnDefinitions>

<Grid.RowDefinitions>

<RowDefinition Height="Auto" />

<RowDefinition Height="11" />

<RowDefinition Height="Auto" />

<RowDefinition Height="11" />

<RowDefinition Height="25" />

</Grid.RowDefinitions>

<TextBlock Grid.Row="0" Grid.Column="0" Text="Name" />

<TextBox Grid.Row="0" Grid.Column="2"

Text="{Binding Name, Mode=TwoWay,

ValidatesOnDataErrors=True}" />

<TextBlock Grid.Row="2" Grid.Column="0" Text="Age" />

<TextBox Grid.Row="2" Grid.Column="2"

Text="{Binding Age, Mode=TwoWay,

ValidatesOnDataErrors=True}" />

<Button Grid.Row="4" Grid.Column="2" Content="Add"

Click="Button_Click" />

</Grid>

</StackPanel>

</Window>

// класс окна

public partial class MainWindow: Window

{

private readonly List<Person> src;

public MainWindow()

{

InitializeComponent();

src = Repository.ReadAll();

lst.ItemsSource = src;

}

private void Button_Click(object sender, RoutedEventArgs e)

{

src.Add(new Person {Name = "Morpheus", Age = 38});

}

}

Запуск приложения выявляет следующий недостаток – ListBox не обновляет свой внешний вид при добавлении элемента. Чтобы включить отслеживание изменений, нужно в качестве источника данных использовать коллекцию с интерфейсом INotifyCollectionChanged. Существует единственная стандартная коллекция, реализующая этот интерфейс – ObservableCollection<T>.

// переписанный фрагмент конструктора

// тип поля src также нужно изменить

src = new ObservableCollection<Person>(Repository.ReadAll());

Рис. 47. Просмотр и редактирование коллекции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: