创建一个视图模型类。
通过在
DataContext
属性中创建它来在视图的xaml中实例化视图模型类。
实现一个方法来加载视图模型中的数据,例如
LoadData
。
设置视图,以便在视图加载时调用此方法。
您可以通过在视图的事件处理程序中实现
Loaded
事件,或者您可以使用交互触发器在视图中链接到视图模型中的方法来完成这个操作。
视图(xaml):
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test"
xmlns:viewModel="clr-namespace:ViewModels" Loaded="Window_Loaded">
<Window.DataContext>
<viewModel:ExampleViewModel/>
</Window.DataContext>
查看(代码后台):
private void Window_Loaded(object sender, RoutedEventArgs e)
{
((ExampleViewModel)this.DataContext).LoadData();
}
如果您不喜欢在代码后台设置
Loaded
事件,您也可以在 xaml 中进行设置(需要引用 "Microsoft.Expression.Interactions" 和 "System.Windows.Interactivity"):
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test"
xmlns:viewModel="clr-namespace:ViewModels"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
>
<Window.DataContext>
<viewModel:ExampleViewModel/>
</Window.DataContext>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="LoadData"/>
</i:EventTrigger>
</i:Interaction.Triggers>
在每种情况下,您都需要在ViewModel中调用LoadData
方法。
在这里,您应该调用一个单独的类来提供数据。
这个类通常被称为repository。
public class ExampleViewModel
{
public ExampleViewModel()
{
}
public void LoadData()
{
}
如果存储库中的方法是异步方法,您也可以使
LoadData 方法异步,但并非每种情况都需要。
通常我不会在视图模型的构造函数中加载数据。
在上面的示例中,当设计师显示您的视图时,将调用视图模型的(无参数)构造函数。在此处执行复杂操作可能会导致设计师在显示视图时出现错误(出于相同的原因,我不会在视图构造函数中进行复杂操作)。
在某些情况下,视图模型构造函数中的代码甚至可能在运行时引起问题,当视图模型构造函数执行时,设置绑定到视图元素的视图模型属性,而视图对象尚未完全创建。