Показать вычисляемое свойство в Entity Framework и WPF UI - PullRequest
2 голосов
/ 12 декабря 2010

У меня есть объект загрузки в моей модели данных 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-интерфейсе у меня есть:

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

Поскольку Progress не является частью Entity Model (edmx), я должен уведомить пользовательский интерфейс о том, что он должен обновить ProgressBar.Я думал, что мог бы сделать это так:

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

Это скомпилируется нормально, но когда я запускаю приложение и вызываются OnBytesDownloadedChanging / Changed, я получаю это исключение при моем вызове ReportPropertyChanging / Changed:

Свойство Progress не имеет действительного сопоставления сущностей для объекта сущности.Для получения дополнительной информации см. Документацию Entity Framework.

Я понимаю, что говорится в сообщении об ошибке, но я не понимаю, что я могу сделать, чтобы действительно достичь своей цели.

PS - На какую конкретно «документацию» они вообще ссылаются?Вздох!Если они намекают, что для этой ошибки есть документация, почему бы просто не связать меня с документацией, вместо того, чтобы [бессмысленно] пытаться найти ее?

1 Ответ

3 голосов
/ 13 декабря 2010

Используйте OnPropertyChanged/Changing вместо ReportPropertyChanged/Changing.Методы On* только вызывают событие, тогда как методы Report* также помечают свойство как измененное для отслеживания изменений.

...