我仍然处于WPF和MVVM模式学习曲线的陡峭部分。 我的部分方法是"了解星际飞船上的运作方式"(可以这么说)。 也就是说,对于我的学习风格,一点点的底层理解对我有很大帮助。
因此,在我看来,我在代码中执行的导致我的 ViewModel 实例化的操作是在 XAML 中声明数据上下文。 有人可以为我确认或更正吗? 换句话说,在此 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 的新实例。 我理解正确吗?
正确的。上面的 XAML 指示 WPF 实例化类MainWindowVM
的实例,并将其分配给 DataContext 属性。例如,如果需要调用采用参数的构造函数,还可以手动将其分配给代码隐藏中的 DataContext 属性,但 XAML 解决方案在你的情况下同样有效。
设置 DataContext 属性允许进行数据绑定。例如,如果您有一个 TextBlock 控件,则可以使用以下命令将其绑定到属性 X:
<TextBlock Text="{Binding Path=X}" />
确保视图模型类实现 INotifyPropertyChanged 接口并触发 PropertyChanged 事件,以便在属性更改时通知视图(Window 类),以便它可以更新任何数据绑定。在上面的示例中,这可确保每当视图模型中属性 X 的值发生更改时,WPF 都知道自动更新 TextBlock。