我仍处于WPF和MVVM模式学习曲线的陡峭部分。我的方法的一部分是“承担如何在星舰上工作”(可以这么说)。也就是说,对于我的学习风格,一点点了不起的理解对我有很大帮助。
因此,在我看来, I 在代码中采取的操作会导致我的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的新实例。我理解正确吗?
答案 0 :(得分:2)
这是正确的。上面的XAML指示WPF实例化类MainWindowVM
的实例并将其分配给DataContext属性。如果需要调用带参数的构造函数,您也可以手动将其创建为后面代码中的DataContext属性,但是XAML解决方案在您的情况下同样有效。
设置DataContext属性可以进行数据绑定。例如,如果您有TextBlock控件,则可以使用:
将其绑定到属性X.<TextBlock Text="{Binding Path=X}" />
确保您的视图模型类实现INotifyPropertyChanged接口并触发PropertyChanged事件,以便在属性更改时通知视图(您的Window类),以便更新任何数据绑定。在上面的示例中,这确保了在视图模型中属性X的值发生更改时,WPF知道自动更新TextBlock。