Показать вычисляемое свойство в Entity Framework и пользовательском интерфейсе WPF

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

Свойство «Ход выполнения» не имеет действительного сопоставления сущности с объектом сущности. Дополнительные сведения см. в документации по Entity Framework.

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

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


person Chad    schedule 12.12.2010    source источник


Ответы (1)


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

person Thomas Levesque    schedule 12.12.2010
comment
Томас, спасибо, но, кажется, я сейчас запутался. Нет автоматически сгенерированных функций OnProgressChanging/Changed, которые я могу вызвать, потому что свойство Progress отсутствует в моей модели данных. Все это тот публичный добытчик, о котором идет речь. Есть ли способ настроить вычисляемое свойство в моей модели данных EF? - person Chad; 13.12.2010
comment
Они не генерируются, они наследуются от базового класса. Просто позвоните OnPropertyChanged("Progress"). На самом деле вам, вероятно, не нужно вызывать OnPropertyChanging, AFAIK, он используется только для отслеживания изменений, а не привязками WPF. - person Thomas Levesque; 13.12.2010
comment
Это сделало это! Спасибо большое. - person Chad; 14.12.2010