代码之家  ›  专栏  ›  技术社区  ›  Doug Ferguson

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

  •  2
  • Doug Ferguson  · 技术社区  · 16 年前

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

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

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

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

    在绑定中键入的问题是,您可能会犯键入错误。(如果要进行数百个绑定,几乎肯定会出错。)

    • 如何使视图模型属性显示在“创建数据绑定”对话框中,以便选择它们。
    • Blend中数据绑定的配置是否会干扰在运行时将我的视图模型设置到DataContext中?
    3 回复  |  直到 16 年前
        1
  •  1
  •   Doug Ferguson    16 年前

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

    • 首先,将实现INotifyPropertyChanged的视图模型对象设置为已更改,并在setters中引发notify事件。视图模型可以是分层的。例如,您可以在主视图模型中有一个ObservableCollection。
    • 在“混合”中打开页面或控件,然后转到“数据”选项卡。
    • 在右侧,打开“添加实时数据源”图标下的菜单。
    • 选择“定义新对象数据源”

    在我的实验中,我发现将数据源绑定到我首先想要的位置是很重要的,否则如果我不先执行下一步,Blend可能会做出不太理想的配置。

    • 选择根对象,例如UserControl
    • 打开“属性”并确认已选择根对象
    • 选择之前刚刚创建的数据源

    既然已经创建了数据源,那么数据绑定就很容易了。

    • 在页面上放置一些控件
    • 打开数据窗口

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

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

        2
  •  1
  •   Nigel Sampson    16 年前

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

    基本上,您可以使用“新对象初始化器”创建ViewModel作为UserControl的DataContext,然后为控件本身使用绑定对话框的“显式数据上下文”选项卡。

        3
  •  1
  •   Tim Cooper    14 年前

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

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

    然后您可以将其引用为 DataContext="{StaticResource ViewModel}" 在别处