寻求更好地理解对ViewModel的数据绑定

时间:2012-09-26 23:43:06

标签: .net wpf xaml data-binding

我仍处于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的新实例。我理解正确吗?

1 个答案:

答案 0 :(得分:2)

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

设置DataContext属性可以进行数据绑定。例如,如果您有TextBlock控件,则可以使用:

将其绑定到属性X.
<TextBlock Text="{Binding Path=X}" />

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