0

我仍然处于 WPF 和 MVVM 模式学习曲线的陡峭部分。我的部分方法是“了解星舰上的事情是如何运作的”(可以这么说)。也就是说,就我的学习方式而言,一些底层的理解对我有很大帮助。

所以在我看来,在代码中采取的导致我的 ViewModel 实例化的操作是在 XAML 中声明 DataContext。有人可以为我确认或更正吗?换句话说,在这个 XAML 代码片段中,

<Window x:Class="MainRM21WPFapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mainVM="clr-namespace:MainRM21WPFapp.ViewModels"
    Title="RM21 Demonstration Application" Height="500" Width="700">
<Window.DataContext>
    <mainVM:MainWindowVM />
</Window.DataContext>
<Grid>
...
</Grid>

就是这个:

<Window.DataContext>
    <mainVM:MainWindowVM />
</Window.DataContext>

这会导致 CLR 创建我的类 MainWindowVM 的新实例。我理解正确吗?

4

1 回答 1

2

那是对的。上面的 XAML 指示 WPF 实例化该类的实例MainWindowVM并将其分配给DataContext属性。例如,如果您需要调用带有参数的构造函数,您也可以在后面的代码中手动将其分配给 DataContext 属性,但 XAML 解决方案在您的情况下同样有效。

设置 DataContext 属性允许发生数据绑定。例如,如果您有一个TextBlock控件,则可以将其绑定到属性 X:

<TextBlock Text="{Binding Path=X}" />

确保您的视图模型类实现INotifyPropertyChanged接口并触发PropertyChanged事件以在属性更改时通知视图(您的 Window 类),以便它可以更新任何数据绑定。在上面的示例中,这确保了每当视图模型中属性 X 的值发生变化时,WPF 都会自动更新 TextBlock。

于 2012-09-27T00:04:27.430 回答