次のモデルを検討してください...
データ・モデル
JobsViewModel にデータモデルを公開する WCF データ サービス (PMService) があります。
WCF データ サービス
namespace PM.DataService
{
[ServiceContract]
public class PMService
{
[OperationContract]
public ObservableCollection<Job> GetAllJobs()
{
using (var context = new logisticDBEntities())
{
var result = context.Jobs.ToList();
result.ForEach(e => context.Detach(e));
return new ObservableCollection<Job>(result);
}
}
[OperationContract]
public ObservableCollection<Status> GetStatuses()
{
using (var context = new logisticDBEntities())
{
var result = context.Statuses.ToList();
result.ForEach(e => context.Detach(e));
return new ObservableCollection<Status>(result);
}
}
}
}
JobsViewModel
namespace PM.UI.ViewModel
{
public class JobsViewModel:INotifyPropertyChanged
{
private PMServiceClient serviceClient = new PMServiceClient();
public JobsViewModel()
{
this.RefreshAllJobs();
}
private void RefreshAllJobs()
{
this.serviceClient.GetAllJobsCompleted += (s, e) =>
{
this.AllJobs = e.Result;
};
this.serviceClient.GetAllJobsAsync();
}
private ObservableCollection<Job> allJobs;
public ObservableCollection<Job> AllJobs
{
get{
return this.allJobs;
}
set
{
this.allJobs = value;
OnPropertyChanged("AllJobs");
}
}
private ObservableCollection<Status> statuses;
public ObservableCollection<Status> Statuses
{
get
{
return this.statuses;
}
set
{
this.statuses = value;
this.OnPropertyChanged("Statuses");
}
}
private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
ビューモデルを MainWindow.xaml に含めました
MainWindow.xaml
<Window x:Class="PM.FullClient.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PM.UI"
xmlns:vms="clr-namespace:PM.UI.ViewModel"
Title="MainWindow" Height="475" Width="575">
<Window.DataContext>
<vms:JobsViewModel/>
</Window.DataContext>
DataGrid を使用して、すべてのジョブを正常に表示しました。
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Path=AllJobs}" Margin="6">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=jobNo}" Header="Job #" />
<DataGridTextColumn Binding="{Binding Path=jobStatus}" Header="Status" />
<DataGridTextColumn Binding="{Binding Path=jobDate}" Header="Date" />
<DataGridTextColumn Binding="{Binding Path=Statuses}" Header="Status" />
</DataGrid.Columns>
</DataGrid>
JobsDataGrid_output
ご覧のとおり、JobsDataGridにはステータスのIDがあります。
現在、ステータスとジョブは 1 対多の関係にあります。Job は Status の主キーを保持します。
私がやりたいことは、jobStatus (statusId) の代わりにそれぞれの statusCaption を表示することです。
Ucodiaのアドバイスに従って編集
以下のコードを挿入しました
...
var result = context.Jobs.ToList();
result.ForEach(e => context.LoadProperty(e, "Status"));
result.ForEach(e => context.Detach(e));
...
結果は同じです(ステータス列はまだ空白です
アプリをデバッグ モードで実行したところ、次の結果が得られました...誰かが私が間違っていることを説明するのに役立つことを願っています。
>>>デバッグデータのスクリーンショット