Ух ты, это действительно сложно, что у тебя там.
Это можно сделать очень простым способом.Вам нужна модель для представления программиста, модель представления для хранения списка программистов и простая привязка для заботы об остальном.
Модель:
public sealed class Programmer
{
public string Name { get; set; }
}
Это очень просто,Объект, представляющий программиста с именем.Мы должны инкапсулировать имя в объект, потому что строки неизменны в .NET.Если вы попытаетесь связать одну строку в списке строк, изменения не будут распространяться.
Коллекция программистов хранится во ViewModel.В этом случае я называю это ViewModel, потому что у меня нет воображения.Эта модель представления содержит все, с чем связывается представление.В данном случае это список программистов.
public sealed class ViewModel
{
public ObservableCollection<Programmer> Programmers { get; private set; }
public ViewModel()
{
Programmers = new ObservableCollection<Programmer>();
}
}
ViewModel устанавливается как DataContext нашего представления.DataContext стекает по визуальному дереву, и мы можем связываться с ним в любой точке.
public MainWindow()
{
var vm = new ViewModel();
vm.Programmers.Add(new Programmer { Name = "Jon Skeet" });
vm.Programmers.Add(new Programmer { Name = "Scott Guthrie" });
DataContext = vm;
InitializeComponent();
}
Вы можете установить DataContext любым способом;Я делаю это здесь для простоты.
В пользовательском интерфейсе я просто связываю ListView со списком программистов в ViewModel (DataContext, если не указано иное, является корнем пути привязки).Затем я связываю TextBox с SelectedItem ListBox.Вы выбираете Программиста из списка, который затем становится SelectedItem, который я затем могу изменить Имя.
<Window
x:Class="Programmers.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:t="clr-namespace:Programmers"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox
x:Name="list"
ItemsSource="{Binding Programmers}"
DisplayMemberPath="Name" />
<TextBox
Grid.Column="1"
VerticalAlignment="Top"
Text="{Binding SelectedItem.Name, ElementName=list}" />
</Grid>
</Window>
Простой, как только вы освоите его.