【发布时间】:2018-10-04 12:38:26
【问题描述】:
我的实体框架类中有以下内容:
public int NumberOfIndividualEngagements { get; set; }
public int NumberOfGroupEngagements { get; set; }
[NotMapped]
public int TotalAudienceReached => NumberOfIndividualEngagements + NumberOfGroupEngagements != 0 ? NumberOfIndividualEngagements + NumberOfGroupEngagements : 0;
在视图中,我有一个 TextBlock 引用 TotalAudienceReached 作为文本。我也有等式中两个项目的文本框。似乎当我更新两个变量(NumberOfIndividualEngagements、NumberOfGroupEngagements)中的任何一个时,TotalAudienceReached 没有更新,View 也没有更新。
问题,这是否可能以这种方式完成,或者我是否需要在我的 ViewModel 中设置一些引用这些更改的独立属性?
编辑
我的虚拟机是这样的:
namespace Core
{
public class MyViewModel : BaseViewModel
{
#region Public Properties
/// <summary>
/// The Parent object
/// </summary>
public Parent Parent
{
get => _Parent;
set
{
Parent = _Parent;
OnPropertyChanged(nameof(Parent));
}
}
private Parent _Parent;
// Other properties...
public MyViewModel()
{
// Load it...
}
}
}
这是我的 EF 数据集
namespace Data
{
[Table("Parent")]
public class Parent : BaseData
{
public int ParentId { get; set; }
public int NumberOfIndividualEngagements { get; set; }
public int NumberOfGroupEngagements { get; set; }
// Other various properties (int, string, bool, etc.)
[NotMapped]
public int TotalAudienceReached => NumberOfIndividualEngagements + NumberOfGroupEngagements != 0 ? NumberOfIndividualEngagements + NumberOfGroupEngagements : 0;
}
}
View 的 DataContext 设置为 MyViewModel。
Container(即 Grid、Stackpanel)的 DataContext 设置为 MyViewModel 中的 Parent 属性。
容器中的控件绑定到父类的属性。
【问题讨论】:
-
当您在 ViewModel 中添加
INotifyPropertyChanged时,神奇的事情发生了,对此进行一些研究,SO 中有很多内容 -
@CelsoLívero 当我将它添加到类中时,视图中没有任何更新。我也有这两个项目的 TextBlocks。我有一个“概览”面板,可以快速查看所有内容。当我添加 INotifyPropertyChanged 时,这些不再更新。
-
再次查看我的答案,我编辑了它
-
ViewModel 是视图的专用模型。您无需使用模型 (EF),只需创建具有所需属性的 VM 并更新模型即可。
-
@Luis 是的,我就是这么做的。我回答了我自己的问题。不过谢谢。
标签: c# wpf entity-framework mvvm attributes