我有两个ComboBox
的WPF应用程序
当我选择第一个组合框时,与第一个组合框相关的项目将填充在第二个组合
这是我的选择属性
public string SelectedApplication
{
set
{
if (_selectedApplication == value) return;
this._selectedApplication = value;
InitializeTransactionTypes();
}
get
{
return this._selectedApplication;
}
}
这里我检查两个组合框之间的匹配ID,以填充第二个组合框项目。
ObservableCollection<TransactionTypeViewModel> _transTypeObsList = new ObservableCollection<TransactionTypeViewModel>();
private void InitializeTransactionTypes()
{
if (_selectedApplication != null)
{
var getAppCode =
ApplicationVModel.GetAllApplications()
.FirstOrDefault(apps => apps.Name == _selectedApplication);
var transTypeList = TransactionTypeVModel.GetAllViewModelTransTypes()
.Where(t => getAppCode != null && t.Id == getAppCode.Id);
transactionTypes = new ObservableCollection<TransactionTypeViewModel>(transTypeList);
NotifyPropertyChanged("TransactionTypes");
}
}
有关方法的更多信息:
从模型列表中映射的VM列表
public List<TransactionTypeViewModel> GetAllViewModelTransTypes()
{
TransactionTypeViewModels = TransactionTypeModel.GetAllTransactionTypes().Select(transType => new TransactionTypeViewModel
{
Id = transType.Id,
Name = transType.Name,
})
.ToList();
return TransactionTypeViewModels;
}
让我说我选择第一个组合框有{A,B,C,D} ......第二个组合框有{A'1,A'2,A'3},当我从第一个Combobox中选择第二个项目时combobo不断填充 项目。我想只显示{A'1代表A} {B'1代表B} ......等等,但现在它的作用是{A'1 A'1 A'1 .....代表A} {B'每个选择1 B'1 B'1 .... for B}。
我希望清除之前的选择并在每个选择中显示一个新列表。感谢
答案 0 :(得分:0)
总结评论。每次更改时都会重新使用您已经拥有的新ObservableCollection
而不是创建新的InitializeTransactionTypes
,它会通知UI有关更改。您的private void InitializeTransactionTypes()
{
if (_selectedApplication != null)
{
var getAppCode =
ApplicationVModel.GetAllApplications()
.FirstOrDefault(apps => apps.Name == _selectedApplication);
transactionTypes.Clear();
foreach(var transactionItem in TransactionTypeVModel.GetAllViewModelTransTypes().Where(t => getAppCode != null && t.Id == getAppCode.Id))
transactionTypes.Add(transactionItem);
}
}
应该是这样的:
TransactionTypes
并且像这样,您不必再通知{{1}}更改