gpt4 book ai didi

wpf - 将实体绑定(bind)到 WPF 表单 MVVM

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

我的问题可能需要几个答案或一个很好的例子我可能会做错事,我很感激任何帮助。

本质上,我正在尝试将 WPF 表单绑定(bind)到我的 Entity Framework 工作模型,同时我正在尝试为我的 WPF 表单学习 MVVM,所以应该有很多示例已经使用了很多来获得我的位置,但我不能找到一个把它钉在一起,无济于事我对 c# 的熟练程度不足以阅读它,我必须一直把它放在翻译器上。

-

我想我需要创建一个继承自我的实体之一的新类,以托管我的 View 模型所需的额外属性

Public Property IsSelected As Boolean
Public Property IsReadOnly As Boolean

和所有其他人......

但是,我还希望 Entity Framework 工作上下文跟踪我的实体,以便这些实体上的导航属性仍然​​有效,我可以调用 SaveChanges ...如果我有新类,这似乎不起作用。
这就是它的症结所在,我无法弄清楚我是如何让 EF 和 MVVM 很好地结合在一起的。

我唯一能想到的就是用我的实体之一作为私有(private)创建一个类,并手动重新创建所有属性,但这肯定是继承的重点。
Class Observation_View
Private Co_Observations_TBL as Observations_TBL

Public New (ByVal Observation as Observations_TBL)
Co_Observations_TBL = Observation
End Sub

Public Property Observed_Value as Single
Get
Return Co_Observations_TBL.Observed_Value
End Get
Set
Co_Observations_TBL.Observed_Value = value
RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Observed_Value"))
End Set
End Property

(我可能需要在构造函数中使用上下文注册实体。)

感觉这不是我应该做的方式,我必须重新实现 PropertyChanged 和各种只是一团糟。

谢谢
蒂姆

旁注我是初学者,我似乎无法找到一种优雅的方式来使用父对象或使用子对象的父对象来构造子类,我似乎必须通过所有对象属性,这真的对吗?

最佳答案

MVVM 中缺少的一件事是 ViewModel。

基本上,您需要创建一个 ViewModel,然后公开属性。这些属性是来自您的模型的对象。然后将 xaml 页面的 DataContext 设置为该 ViewModel 的实例。您可以在构造它时从构造函数或其他任何地方加载要显示的对象。

例如,您可以有一个 ObservationViewModel,它公开一个观察列表和一个 SelectedObservation:

Public Class ObservationViewModel

Public Property Observations As IEnumerable(Of Observation)
' implement the property and raise PropertyChangedEvent here in the setter (omitted for brevity)

Public Property SelectedObservation as Observation
' implement the property and raise PropertyChangedEvent here in the setter (omitted for brevity)
End Class

然后在您的 View 中将观察和选定的观察绑定(bind)到您的 ViewModel:
<ListBox ItemsSource="{Binding Observations}" SelectedItem="{Binding SelectedObservation, Mode=TwoWay}" />

要将更改保存到数据库,请使用命令。您在 ViewModel(如上所示的类)中声明一个命令,如下所示:
 ' Note: to use RelayCommand you should add an MVVM-framework such as MVVM Light
Public Property SaveCommand as New RelayCommand(
Sub()
' Save the list of objects that have changed here
End Sub()
)

之后,您可以像这样在 XAML 中绑定(bind)保存按钮:
<Button Command="{Binding SaveCommand}" />

关于wpf - 将实体绑定(bind)到 WPF 表单 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156411/

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