riaサービスでmvvmを使用するSilverlightアプリがあります。ビューにテキストボックスがあり、ユーザーがジョブ番号を入力して[検索]をクリックします。この検索ボタンは、xamlのICommandを使用してここに移動しています。
public ICommand FindJob
{
get
{
return new DelegateCommand(BeginFindJob, (o) => true);
}
}
public void BeginFindJob(object o)
{
if (!IsDesignTime)
{
IsLoading = true;
string jobnum = o.ToString();
OnPropertyChanged("IsLoading");
LoadOperation<Job> loadOp = _context.Load<Job>(_context.GetJobsByJobNumQuery(jobnum));
loadOp.Completed += new EventHandler(loadOp_Completed);
}
}
それは私のriaサービスでGetJobsByJobNumQueryをそのように使用します。
public IQueryable<Job> GetJobsByJobNum(string JobNum)
{
var query = ((from j in this.ObjectContext.Jobs
where j.JobNumber == JobNum
select j) as ObjectQuery<Job>).Include("JobHeadings").Include("JobContracts").Include("JobTags").Include("JobMarket");
return query;
}
ジョブに関するすべての情報を返すようにしたいので、上記のクエリを記述して、これらすべての関係を含めました。linqクエリにブレークポイントを設定して結果を確認すると、私が思いもよらなかったことが正確にわかります。すべてのフィールド、JobHeadingsおよびContractsが機能しており、すべてのバインディングをそのジョブに戻しています。だから今、私はそのクエリをビューモデルに戻し、フィールドにデータを入力します。
void loadOp_Completed(object sender, EventArgs e)
{
try
{
LoadOperation<Job> loadOp = sender as LoadOperation<Job>;
if (!loadOp.HasError)
{
_job = loadOp.Entities.FirstOrDefault<Job>();
base.IsLoading = false;
base.ProgressBarVisibility = Visibility.Collapsed;
base.OnPropertyChanged("IsLoading");
base.OnPropertyChanged("ProgressBarVisibility");
base.OnPropertyChanged("CurrentJob");
}
}
catch (Exception ex)
{
}
}
私の問題は、関係データが戻ってこないことです。すべての基本的なジョブ情報は私のデータベースのジョブテーブルから戻ってきますが、関連するテーブルからの情報はどれも私のビューモデルに戻ってきません。bpを入れて、すべてが含まれているはずの_jobを見ると、すべての関係テーブルJobHeading/JobContractは「列挙は結果を生成しませんでした」と言います。
では、どうしてビューモデルに戻らないのでしょうか。クエリ結果全体をビュー/ビューモデルに入れて変更できるようにするにはどうすればよいですか?