这是一个使用 MVVM 的示例。
我的客户模型非常简单,如下所示:
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
接下来,我们需要一个 ViewModel,应用程序的 MainWindow 将绑定到该 ViewModel。它拥有客户,并具有通过按钮在客户之间移动的方法。CollectionView 类型支持当前项目跟踪,我想类似于 WinForms 的 BindingSource:
public class MyViewModel
{
public ICollectionView Customers { get; set; }
public void MoveSelectionLeft()
{
Customers.MoveCurrentToPrevious();
}
public void MoveSelectionRight()
{
Customers.MoveCurrentToNext();
}
public MyViewModel()
{
Customers = new CollectionViewSource
{
Source = new[]
{
new Customer {Name = "John", Age = 25},
new Customer {Name = "Jane", Age = 27},
new Customer {Name = "Dawn", Age = 31}
}
}.View;
}
}
接下来我们有视图。我正在使用 Caliburn Micro 来简化将操作连接到按钮的过程。只需下载它并将对 Caliburn.Micro.dll 的引用添加到您的项目中:
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org" Title="MainWindow" Height="400" Width="400">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox Grid.RowSpan="2" ItemsSource="{Binding Customers}" DisplayMemberPath="Name"/>
<DockPanel Grid.Column="1" LastChildFill="False">
<Button DockPanel.Dock="Left" Content="<"
cal:Message.Attach="[Event Click] = [MoveSelectionLeft]"/>
<Button DockPanel.Dock="Right" Content=">"
cal:Message.Attach="[Event Click] = [MoveSelectionRight]"/>
</DockPanel>
<StackPanel Grid.Row="1" Grid.Column="1">
<DockPanel>
<TextBlock MinWidth="50" Text="Name" Margin="0,0,5,0"/>
<TextBox Text="{Binding Customers/Name}"/>
</DockPanel>
<DockPanel>
<TextBlock MinWidth="50" Text="Age" Margin="0,0,5,0"/>
<TextBox Text="{Binding Customers/Age}"/>
</DockPanel>
</StackPanel>
</Grid>
我们有一个绑定到 MyViewModel 的 Customers 属性的 ListBox,其 Click 事件已附加到 MoveSelection 方法的按钮,并且 Customer 字段绑定到 Customers/ 属性,该属性是 Customers.CurrentItem 的缩写。
假设这是 WPF 应用程序的主窗口,我们接下来需要做的就是将其 DataContext 设置为 MyViewModel。这可以通过在代码隐藏的构造函数中添加以下内容来完成:
public MainWindow()
{
this.DataContext = new MyViewModel();
InitializeComponent();
}
现在应该设置所有内容,以便您可以构建和运行应用程序。它看起来像这样: