gpt4 book ai didi

wpf - 使用 MVVM 和 EF 的简单 WPF

转载 作者:行者123 更新时间:2023-12-03 10:38:18 24 4
gpt4 key购买 nike

我快要发疯了。

我有一个工作的 WinForms/数据库应用程序,我尝试用 WPF 重建它。我的主要问题是我以前没有使用过 MVVM,而且我似乎无法掌握从 Entity Framework 到 View 的数据绑定(bind)。

我的 WinForms 是专门使用代码隐藏构建的,我知道这是不好的做法,但它确实有效。
我已经阅读了大约 100 篇文章、教程和示例,下载了几个使用 MVVM 的演示/示例。包括“WPF应用框架(WAF)”

但是我还没有找到一个简单的解决方案/示例,如何将 EF 用作模型或模型的数据提供者。并将信息传递给 ViewModel,最后从 View 中绑定(bind)它。

我读过的所有教程都只描述了从静态列表中获取数据,我需要对数据库进行常规的 CRUD 操作。

我知道这里一直有人问这样的问题,但我无法找到将数据从 EF 推送到 View (模型)并通过 EF 更新回来的答案。我希望你们中的一些人可以帮助像我这样的(必须是智障的)人提供一些指导。

最佳答案

MVVM 模式很大程度上取决于 EF 实现的 INotifyPropertyChanged 接口(interface),因此这里的一些工作已经为您完成。

我不太确定您的特定要求,但从为您的窗口创建 View 模式开始。假设您有一个名为 Person 的实体,其属性为 FirstName 作为字符串,Id 为 Int32(当然),并且数据层的所有工作都已处理。我将向您展示如何列出人员实体并允许编辑人员实体。

查看型号

public class Window1ViewModel : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;

private ObservableCollection<Person> _people;
private Person _selectedPerson;

public ObservableCollection<Person> People {
get { return _people; }
set { _people = value;
this.RaisePropertyChanged("People");
}
}

public Person SelectedPerson {
get { return _selectedPerson; }
set { _selectedPerson = value;
this.RaisePropertyChanged("SelectedPerson");
}

public Window1ViewModel() {
// Instead of setting to empty collection populate with data from EF.
this.People = new ObservableCollection<Person>();
}

private void RaisePropertyChanged(string propertyName) {
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

现在您已经处理好 ViewModel,是时候创建 UI 并绑定(bind)它了。

绑定(bind)列表框
<ListBox ItemsSource="{Binding Source={StaticResource viewModel}, Path=People}" SelectedItem="{Binding Source={StaticResource viewModel}, Path=SelectedPerson, Mode=TwoWay}"/>

绑定(bind)文本框
<TextBox Text="{Binding Source={StaticResource viewModel}, Path=SelectedPerson.FirstName, Mode=TwoWay}"/>

最后,您可以在 Window 上创建一个按钮,将其绑定(bind)到 ViewModel 上的 ICommand 以调用 EF 层中的 Save() 方法。

您可以写很多东西来满足您的要求,我希望这对您有所帮助。还推荐以下信息。 http://www.codeproject.com/Articles/81484/A-Practical-Quick-start-Tutorial-on-MVVM-in-WPF

关于wpf - 使用 MVVM 和 EF 的简单 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16007302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com