【问题标题】:Show Computed Property in Entity Framework and WPF UI在实体框架和 WPF UI 中显示计算属性
【发布时间】:2010-12-12 19:37:10
【问题描述】:

我的 EF 数据模型中有一个下载实体。它的两个属性 Size 和 BytesDownloaded 计算得出我在分部类中创建的 Progress 属性:

partial class Download
{
    public int Progress
    {
        get
        {
            if (!Size.HasValue || Size.Value == 0) return 0;
            return Convert.ToInt32(Math.Floor(100.0 * ((double)BytesDownloaded / (double)Size)));
        }
    }
}

在我的 WPF UI 中,我有:

<DataGridTemplateColumn x:Name="progressColumn" Header="Progress"  Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ProgressBar Value="{Binding Path=Progress, Mode=OneWay}" Maximum="100" />
       </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

由于 Progress 不是实体模型 (edmx) 的一部分,我必须通知 UI 它应该更新 ProgressBar。我以为我可以这样做:

partial void OnBytesDownloadedChanging(long value)
{
    ReportPropertyChanging("Progress");
}
partial void OnBytesDownloadedChanged()
{
    ReportPropertyChanged("Progress");
} 

这编译得很好,但是当我运行应用程序并调用 OnBytesDownloadedChanging/Changed 时,我在调用 ReportPropertyChanging/Changed 时收到此异常:

属性“进度”没有 实体上的有效实体映射 目的。有关详细信息,请参阅 实体框架文档。

我理解错误消息的含义,但我不明白我可以做些什么来真正实现我的目标。

PS - 他们甚至指的是什么具体的“文档”?叹!如果他们要暗示有此错误的文档,他们为什么不直接将我链接到文档,而不是告诉我[毫无意义地]尝试找到它?

【问题讨论】:

    标签: c# wpf entity-framework inotifypropertychanged


    【解决方案1】:

    使用OnPropertyChanged/Changing 代替ReportPropertyChanged/ChangingOn* 方法仅引发事件,而 Report* 方法还将属性标记为已修改以进行更改跟踪。

    【讨论】:

    • Thomas,谢谢,但我想我现在很困惑。没有可以调用的“OnProgressChanging/Changed”自动生成函数,因为 Progress 属性不在我的数据模型中。只是问题中的公共吸气剂。有没有办法在我的 EF 数据模型中设置计算属性?
    • 它们不是生成的,它们是从基类继承的。只需致电OnPropertyChanged("Progress")。实际上您可能不需要调用OnPropertyChanging,AFAIK 它仅用于更改跟踪,而不是 WPF 绑定
    • 做到了!非常感谢。
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多