提前感谢您的帮助。我有两个组合框,我想依赖于彼此的输入。例如,当我更新一个时,它会过滤下一个的可用值。以为我把一切都搞定了,直到我在两者之间切换了几次,都只是因为空白。
我有两个国家组合框,FromCountry和ToCountry。这些绑定到名为Countries的ObservableCollection。我认为使用DroDownOpened事件来限制下拉组合框中的可用值是有意义的。
非常感谢任何建议或帮助。
单击“收件人国家/地区”下拉列表时调用的方法
private void ToCountry_DropDownOpened(object sender, EventArgs e)
{
int FromId = (Countries.Country)FromCountry.selectedItem).ID;
int ToId = (Countries.Country)ToCountry.selectedItem).ID;
this.ToCountry.ItemsSource = AppInfo.CountryList.Where(p=>p.ID!=FromId).OrderBy(c => c.Name);
}
单击“来自国家/地区”下拉列表时调用的方法
private void FromCountry_DropDownOpened(object sender, EventArgs e)
{
int FromId = (Countries.Country)FromCountry.selectedItem).ID;
int ToId = (Countries.Country)ToCountry.selectedItem).ID;
this.FromCountry.ItemsSource = AppInfo.CountryList.Where(p=>p.ID!=ToId).OrderBy(c => c.Name);
}
答案 0 :(得分:0)
您是否尝试过两个ObservableCollections ToCountries和FromCountries,然后对选择更改的事件做出反应以填充?
答案 1 :(得分:0)
经过一些实验,我设法找到了一个有效的解决方案。下面允许我有两个组合框依赖于相同的数据源,以及彼此。我确信优雅的方法,但这似乎有效。
1)在我的ObservableCollection上,我添加了两个额外的属性,ToSelected和FromSelected。
2)然后我没有绑定到Comboboxes,而是通过循环填充它们的目录。这不是最好的方法,但它似乎是最直接的。
foreach (Countries.Country currentCnty in CountryList)
{
ComboBoxItem toItem = new ComboBoxItem();
toItem.Content = currentCnty;
CmboToCountry.Items.Add(toItem);
ComboBoxItem fromItem = new ComboBoxItem();
fromItem.Content = currentCnty;
CmbFromCountry.Items.Add(fromItem);
}
3)然后我创建了名为UpdateLogic的方法。这只是循环遍历ObservableCollection设置From和To组合框的选定记录。
4)然后在每个组合框的选择更改时,我添加了以下内容以设置其他组合框项目的可见性。例如,To Country组合框将设置From Country项目的可见性,反之亦然。
//Update the underlying collection with selected items
UpdateLogic((Countries.Country)CmboToCountry.Content, (Countries.Country)CmboFromCountry.Content);
for (int iLoop = 0; iLoop < CmboToLocation.Items.Count; iLoop++)
{
ComboBoxItem currentItem = CmboToCountry.Items[iLoop] as ComboBoxItem;
Countries.Country currentCountry = (Countries.Country)currentItem.Content;
currentItem.Visibility = ((currentCountry.IsFrom) && (currentCountry.ID > 0))
? Visibility.Collapsed : Visibility.Visible;
}
拥有两个相互依赖的组合框的业务需求是一个有趣的挑战。希望这可以帮助将来的某个人。虽然我确信有更优雅的解决方案来执行此任务。