Показване на изчислено свойство в Entity Framework и WPF UI

Имам обект за изтегляне в моя 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