业务规则: 可以通过开幕式填充展示位置,其中可以分配与开幕相匹配的候选人。 开幕式需要一项资格。 候选人可以有许多资格和许多候选人可以获得资格,所以联合证书是为了避免多对多关系。WPF实体的列表框的MVVM内容取决于实体的另一个列表框
问题: 主窗口显示资格,候选人和安置。为了添加展示位置,我点击具有PlacementModel的DataContext的添加展示位置窗口,并出现一个新窗口,其中有2个列表框和一个用于完成添加的按钮,用户必须在列表框和候选列表中选择一个展开位置,匹配出现在另一个列表框中。 2列表框的绑定路径分别是“开口”和“证书”。 我想让证书列表框更新其列表,每当我点击一个开放。
实体是候选人,资格,安置,证书和开幕。
我该如何执行此操作?
列表框绑定路径:
LstOpenings(的ItemsSource =开口的SelectedItem = SelectedOpening)
LstCertificates(的ItemsSource =证书,的SelectedItem = SelectedCertificate)
PlacementModel:
#region Public Interface
public ObservableCollection<OpeningModel> Openings { get; private set; }
public ObservableCollection<CertificateModel> Certificates { get; private set; }
public OpeningModel SelectedOpening { get { return _selectedOpening; } set { _selectedOpening = value; } }
public CertificateModel SelectedCertificate
{
get { return _selectedCertificate; }
set
{ _selectedCertificate = value;
}
}
#endregion
#region Private Helper
private void GetOpenings()
{`enter code here`
var all = _context.Openings.OrderBy(cust => cust.OpeningDescription).ToList()
.Select(
opening =>
new OpeningModel(opening, _context, _openingRepository, _companyRepository,
_qualificationRepository,_certificateRepository));
Openings = new ObservableCollection<OpeningModel>(all);
ICollectionView view = CollectionViewSource.GetDefaultView(Openings);
view.SortDescriptions.Add(new SortDescription("OpeningDescription",ListSortDirection.Ascending));
}
private void GetCertificates()
{
if (_selectedOpening == null)
{
Certificates = new ObservableCollection<CertificateModel>();
}
else
{
var all =_certificateRepository.GetCertificates().Where(c => c.QualificationCode == _selectedOpening.QualificationCode)
.OrderBy(c => c.Qualification.QualificationDescription)
.ToList().Select(c=>new CertificateModel(c,_context,_certificateRepository,_candidateRepository,_qualificationRepository));
Certificates = new ObservableCollection<CertificateModel>(all);
ICollectionView view = CollectionViewSource.GetDefaultView(Certificates);
view.SortDescriptions.Add(new SortDescription("QualificationDescription", ListSortDirection.Descending));
}
}
#endregion
对不起,但我不知道我应该在UpdateCertificates()里面放什么。 我尝试使用我的GetCertificates()方法内的代码,但假设选择的开放永远不会为空,所以如果条件不再适用。这种方法不起作用,所以我真的不知道应该在UpdateCertificates中放置什么,这会使得证书的列表框在每次单击开始时筛选出不合格的候选人 – 2014-10-09 12:50:48