Я создал очень простой пример MVVM, который покажет вам некоторые основные функции.
Сначала я создал объект 'Car'.Это то, что будет содержать мой список.
Car.cs
public class Car
{
public Car(string make, string model, int year)
{
Model = model;
Make = make;
Year = year;
}
public string Model { get; set; }
public string Make { get; set; }
public int Year { get; set; }
}
Затем я создал ViewModel для установки в качестве DataContext моего представления.ViewModel имеет два свойства: «Автомобили» и «Выбранный автомобиль».Представление будет привязано к этим двум свойствам.Вот реализация ViewModel.
MainWindow_ViewModel.cs
public class MainWindow_ViewModel : INotifyPropertyChanged
{
public MainWindow_ViewModel()
{
this.Cars = LoadInitialCarList();
this.SelectedCar = this.Cars.First();
}
public List<Car> Cars
{
get { return cars; }
set
{
if (cars != value)
{
cars = value;
OnPropertyChanged("Cars");
}
}
}
private List<Car> cars;
public Car SelectedCar
{
get { return selectedCar; }
set
{
if (selectedCar != value)
{
selectedCar = value;
OnPropertyChanged("SelectedCar");
}
}
}
private Car selectedCar;
private List<Car> LoadInitialCarList()
{
List<Car> list = new List<Car>();
list.Add(new Car("Chevrolet", "Camaro", 1968));
list.Add(new Car("Ford", "Mustang", 1965));
list.Add(new Car("Pontiac", "GTO", 1970));
return list;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
Теперь, в представлении, я смог создать ListBox (как вы предложили) и заполнить его ItemSource моим списком.автомобилей.Я также привязал SelectedItem ListBox к SelectedCar на ViewModel.Я поместил какой-то другой текст в представление, чтобы показать больше данных о выбранном автомобиле.
MainWindow.xaml
<Window x:Class="ListBoxBinding.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"
xmlns:local="clr-namespace:ListBoxBinding"
>
<Window.DataContext>
<local:MainWindow_ViewModel/>
</Window.DataContext>
<StackPanel>
<ListBox ItemsSource="{Binding Cars}" SelectedItem="{Binding SelectedCar, Mode=TwoWay}"/>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="3" Text="{Binding SelectedCar.Year}"/>
<TextBlock Margin="3" Text="{Binding SelectedCar.Make}"/>
<TextBlock Margin="3" Text="{Binding SelectedCar.Model}"/>
</StackPanel>
</StackPanel>
Когда вы выбираете элемент в ListBox, он обновляет SelectedItem в ViewModel, поэтому он обновляет TextBlocks, которые являютсяпривязан к свойствам на SelectedCar.
Я думаю, что это что-то похожее на то, что вы пытаетесь достичь.Надеюсь, это поможет!