我在Expression Blend中有一个WPF应用程序。
在应用程序中,我希望在右侧有一个列出单词的列表框。
当用户点击某个字词时,我希望在左侧显示单词,说明和其他文字的较大文字。
我理解为了列出列表框中的所有单词,我需要对包含单词,描述和其他文本的数据进行数据绑定。
我是这个数据绑定的新手。
有人可以帮我在Expression Blend 4中如何做到这一点吗?
谢谢!
答案 0 :(得分:7)
我构建了一个非常基本的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有两个属性,'Cars'和'SelectedCar'。视图将绑定到这两个属性。这是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(就像你建议的那样)并用我的Cars列表填充它的ItemSource。我还将ListBox的SelectedItem绑定到ViewModel上的SelectedCar。我在视图中放置了一些其他文本,以显示有关所选汽车的更多数据。
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中选择一个项目时,它将更新ViewModel上的SelectedItem,因此,它会更新绑定到SelectedCar上的属性的TextBlock。
我认为这与你想要完成的事情类似。希望这有帮助!