【问题标题】:How to update the UI using bindings如何使用绑定更新 UI
【发布时间】:2012-02-06 11:34:58
【问题描述】:

我的窗口中有一个 DataGrid 和两个 ListBox。我正在使用实体框架连接到我的 SQL Server。根据我在 ListBoxes 参数中所做的选择,将传递给我的存储过程,并检索我的 DataGrid 的数据。我能够在不使用 MVVM 的情况下实现此功能。我想知道如何使用 MVVM 来实现它。请帮帮我。提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    <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 完成,但在转换器中可能并不总是可行或实用。

    【讨论】:

    • 在视图模型中进行转换确实很难正确进行。大多数尝试在模型和视图模型之间连接属性更改通知的人最终会导致内存泄漏。
    • 我认为您将模型和虚拟机的一些职责混为一谈。传统上,诸如将状态转换为可视化表示 (transforming enums to colors) 等任务不是 VM 的工作,而是视图(自定义转换器、DataTemplate 选择器等)的工作。
    • @Will,因此脚注 #2 - 颜色的枚举只是一个易于理解的使用示例。我已经看到很多情况下,评估 VM 中的东西而不是转换器(业务规则、访问服务)更合适,但我想不出一些简单的东西,而不是我的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2016-11-14
    • 2016-12-17
    • 2016-03-07
    相关资源
    最近更新 更多