如何使用绑定更新UI

时间:2012-01-09 23:46:50

标签: wpf entity-framework stored-procedures mvvm datagrid

我的窗口中有一个DataGrid和两个ListBoxes。我正在使用Entity Framework连接到我的SQL Server。根据我在ListBoxes中所做的选择,参数将被传递给我的存储过程,并且将检索我的DataGrid的数据。我能够在不使用MVVM的情况下实现此功能。我想知道使用MVVM实现此方法的方法。请帮帮我。在此先感谢。

1 个答案:

答案 0 :(得分:4)

首先,MVVM是关于将代码的关注点分离到适当的区域。例如,通过EF与您的数据库通信应该在Model 1 中完成。 ViewModel负责保存数据,并对其进行整形或按摩以使其更适合显示(即将枚举转换为颜色 2 等)。

要以MVVM方式实现您的功能,您需要使用绑定,并将您的viewmodel绑定到您的视图:

<MyControl>
    <LayoutRoot>
        <ListBox ItemsSource={Binding MyItems} SelectedItem={Binding MySelection} />
    </LayoutRoot>
</MyControl>
在视图背后的代码中

public class MyControl
{
    public MyControl()
    {
        this.DataContext = new MyViewModel();
    }
}

你的ViewModel看起来像这样:

public class MyViewModel : INotifyPropertyChanged
{
    public ObservableCollection<MyDataObject> MyItems 
    { 
        get { return _myItems; }
        set
        {
            _myItems = value;
            OnPropertyChanged("MyItems");
        } 
    }

    public MyDataObject MySelection { get; set; }

    public void DoSomethingWithDatabase()
    {
        Model.DoSomething(MySelection);
    }
}

这只是一个非常简单的例子来说明如果你以MVVM的方式做事情需要什么(我故意错过了一堆东西)。要做一个正确的示例并记录您需要知道的所有基本位,至少需要一本书中的一章,因此我将向您推荐MSDN文章以供进一步阅读: Implementing the Model-View-ViewModel Pattern



1 如果你也实施SOA,模型可能只是一个垫脚石,模型可能只是调用一个服务,然后与数据库进行对话。
2 这也可以在视图中使用Converters完成,但在转换器中可能并不总是可行或不实用。