2010-12-12 9 views
2

私はEFデータモデルにダウンロードエンティティを持っています。その性質の二つ、サイズとBytesDownloaded、私が部分クラスで作成したプログレス性を付与するために計算する:私のWPF UIでEntity FrameworkとWPF UIのComputedプロパティを表示

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))); 
     } 
    } 
} 

私が持っている:

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

進歩ではないのでEntity Model(edmx)の一部であるため、ProgressBarを更新する必要があることをUIに通知する必要があります。私はそうのようにこれを行うことが考えた:

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

これは罰金コンパイルが、私はアプリを実行し、OnBytesDownloadedChanging /変更が呼び出されたとき、私はReportPropertyChangingに私の呼び出し/変更でこの例外を取得:

プロパティ 'Progress'は、エンティティ オブジェクトに有効なエンティティマッピング を持っていません。詳細については、 Entity Frameworkのドキュメントを参照してください。

エラーメッセージの内容を理解していますが、実際に目標を達成するためにできることは理解できません。

PS - 具体的な「ドキュメント」とは何ですか?一口!彼らがこのエラーのためのドキュメントがあることを暗示するつもりなら、どうして彼らは私に[無意識に]試して見つけようと言うのではなく、ドキュメントにリンクするだけですか?

答えて

3

ReportPropertyChanged/Changingの代わりにOnPropertyChanged/Changingを使用してください。 On*メソッドはイベントを発生させるだけですが、Report*メソッドはプロパティを変更追跡のために変更されたものとしてマークします。

+0

トーマス、ありがとう、しかし、私は今混乱していると思います。 Progressプロパティが自分のデータモデルにないために呼び出すことができる 'OnProgressChanging/Changed'自動生成関数はありません。それはすべて、問題になっているパブリックゲッターです。 EFデータモデルで計算されたプロパティを設定する方法はありますか? – Chad

+1

これらは生成されず、基本クラスから継承されます。 'OnPropertyChanged(" Progress ")'を呼び出すだけです。実際には、おそらく 'OnPropertyChanging'を呼び出す必要はありません.AVAIKはWPFバインディングではなく、変更トラッキングにのみ使用されています –

+0

それはそれでした!本当にありがとう。 – Chad

関連する問題