寻求更好地理解数据绑定到视图模型



我仍然处于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。

相关内容

  • 没有找到相关文章

最新更新