次のデータモデルを検討してください
私はここに来たばかりなので画像を投稿できないので、別の方法を試してみます...
ジョブ エンティティ -jobId -jobNo -jobStatus (ステータス エンティティからの外部キー) -jobDate
ステータス エンティティ -statusId -statusCaption
Relationship Job Entity * ----------- 0..1 Status Entity
JobsViewModel によってアクセスされるモデルを公開する 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);
}
}
}
}
namespace PM.UI.ViewModel
{
public class JobsViewModel:INotifyPropertyChanged
{
private PMServiceClient serviceClient = new PMServiceClient();
public JobsViewModel()
{
this.RefreshStatuses();
this.RefreshAllJobs();
}
private void RefreshAllJobs()
{
this.serviceClient.GetAllJobsCompleted += (s, e) =>
{
this.allJobs = e.Result;
};
this.serviceClient.GetAllJobsAsync();
}
private void RefreshStatuses()
{
this.serviceClient.GetStatusesCompleted += (s, e) =>
{
this.Statuses = e.Result;
};
this.serviceClient.GetStatusesAsync();
}
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 に JobsViewModel を含めました
<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>
....
すべてのステータスを表示するようにバインドすることで、MainWindow に DataGrid を簡単に設定できるようになりました。
<DataGrid ItemsSource="{Binding Path=Statuses}" Margin="7,8,9,8" AutoGenerateColumns="True">
それは機能しますが、ここに画像を投稿できないため、出力を表示できません
しかし、ジョブズで同じことをしようとすると... 何も起こりません。データグリッドは空です
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=AllJobs}" Margin="6">
</DataGrid>
私は多くの方法論を調べて、たくさんのフォームやウェブサイトを検索してきましたが、ついにここに来ました.
Jobs と Statuses の間の Status > Job 関係の cos でしょうか? もしそうなら、どうすればこれを修正できますか?