如何在Expression Blend中数据绑定到ViewModel?

时间:2009-10-01 13:09:43

标签: wpf silverlight mvvm expression-blend

在WPF和Silverlight中,您可以创建一个视图模型对象,并在运行时构造控件时将其设置为控件的DataContext。然后,您可以将可视对象的属性绑定到DataContext中的属性。

设置绑定的一种方法是直接在标记中键入绑定:

<TextBox Text="{Binding Path=Description}"/>

这会将文本框绑定到视图模型中的Description属性。

键入绑定的问题是您可能会输入错误。 (如果你有数百个绑定,你几乎肯定会犯错。)

在Expression Blend中,“属性”窗口中的Text属性旁边有一个小白点。这将打开一个菜单,您可以从中创建数据绑定。

  • 如何在“创建数据绑定”对话框中显示我的视图模型属性,以便我可以选择它们。
  • Blend中数据绑定的配置是否会影响在运行时将我的视图模型设置为DataContext?

3 个答案:

答案 0 :(得分:1)

一种技术是将VM作为资源包含在您的视图中:

<UserControl>
    <UserControl.Resources>
        <local:YourViewModel x:Key="ViewModel"/>
    </UserControl.Resources>
</UserControl>

然后,您可以在其他位置引用DataContext="{StaticResource ViewModel}"

不能说我喜欢它,但我不能说我喜欢Blend对你的设计施加的任何视图优先特性。

答案 1 :(得分:1)

我尝试使用Blend来找到数据绑定的拖放方法,这仍然可以让您轻松地在代码中覆盖视图模型。

  • 首先制作实现INotifyPropertyChanged的视图模型对象,并在setter中引发notify事件。视图模型可以是分层的。例如,您可以在主视图模型中使用ObservableCollection。
  • 在Blend中打开您的页面或控件,然后转到数据选项卡。
  • 在右侧打开“添加实时数据源”图标下的菜单。
  • 选择“定义新对象数据源”
  • 选择您的顶级视图模型类并确认对话框

在我的实验中,我发现将数据源首先绑定到我想要的位置很重要,否则如果我没有先完成下一步,Blend可能会使配置不是最佳配置。

  • 在Blend
  • 中打开“对象和时间线”窗口
  • 选择根对象,例如UserControl
  • 打开属性并验证是否已选择根对象
  • 查找DataContext并单击方框以打开菜单并选择DataBinding
  • 选择刚刚创建的数据源

现在已经创建了数据源,数据绑定非常容易。

  • 在页面上添加了一些控件
  • 打开数据窗口
  • 来自视图模型的DataSource的
  • 将属性拖到控件上以创建绑定或从“属性”窗口设置绑定。

现在,您可以在控件的构造函数中创建实时视图模型对象

public MainPage()
    {
        // Required to initialize variables
        InitializeComponent();
        mVm = new MyViewModel();
        this.DataContext = mVm;
    }
    private MyViewModel mVm;

添加任何初始化以检索数据,您就可以开始了。

答案 2 :(得分:1)

我的博客Blendable MVVM : Introduction and Databinding上有一个屏幕投射,显示为Siverlight设置了这个。

基本上,您使用“New Object Initialiser”创建ViewModel作为UserControl的DataContext,然后使用Binding对话框的“Explicit Data Context”选项卡为控件本身。

希望这有帮助。