Новое в привязке данных в Expression Blend - PullRequest
2 голосов
/ 06 июля 2010

У меня есть приложение WPF в Expression Blend.

В приложении я хочу, чтобы справа находился список со списком слов.

Когда пользователь нажимает на слово, я хочу, чтобы слева отображался увеличенный текст слова, описания и некоторого другого текста.

Я понимаю, что для перечисления всех слов в списке мне нужно привязать данные, которые содержат слова, описание и другой текст.

Я новичок в этой привязке данных.

Может кто-нибудь помочь мне, как это сделать в Expression Blend 4?

Спасибо!

1 Ответ

7 голосов
/ 06 июля 2010

Я создал очень простой пример 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.

Я думаю, что это что-то похожее на то, что вы пытаетесь достичь.Надеюсь, это поможет!

...