Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight相关或筛选组合框_Silverlight_Combobox - Fatal编程技术网

Silverlight相关或筛选组合框

Silverlight相关或筛选组合框,silverlight,combobox,Silverlight,Combobox,提前感谢您的帮助。我有两个组合框,我想依赖于彼此的输入。例如,当我更新一个时,它会过滤下一个的可用值。我一直以为一切正常,直到我在两者之间切换了几次,都是因为空白 我有两个带国家的组合框,从国家到国家。这些都与一个称为国家的可观察集合有关。我认为使用drodownopend事件来限制下拉组合框中可用的值可能是有意义的 如有任何建议或帮助,将不胜感激 方法,该方法在单击“收件人国家/地区”上的下拉列表时被调用 private void ToCountry_DropDownOpened(object

提前感谢您的帮助。我有两个组合框,我想依赖于彼此的输入。例如,当我更新一个时,它会过滤下一个的可用值。我一直以为一切正常,直到我在两者之间切换了几次,都是因为空白

我有两个带国家的组合框,从国家到国家。这些都与一个称为国家的可观察集合有关。我认为使用drodownopend事件来限制下拉组合框中可用的值可能是有意义的

如有任何建议或帮助,将不胜感激

方法,该方法在单击“收件人国家/地区”上的下拉列表时被调用

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);
}
方法,该方法在单击From Country上的下拉列表时被调用

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);
}

您是否尝试过向国家/地区和来自国家/地区进行两次可观察的收集,然后对选择更改的事件做出反应以进行填充?

经过一些实验后,我设法找到了一个有效的解决方案。下面允许我有两个组合框,它们依赖于同一个数据源,并且相互依赖。我相信这是一种优雅的方法,但这似乎有效

1在我的ObservableCollection上,我添加了两个附加属性ToSelected和FromSelected

2然后,我没有绑定到组合框,而是通过一个循环在目录中填充它们。这不是最好的方法,但似乎是最直接的方法

                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;
            }

拥有两个相互依赖的组合框的业务需求一直是一个有趣的挑战。希望这对将来的人有所帮助。虽然我相信有一个更优雅的解决方案来执行这项任务

我已经试过了。它让我更接近了,但我面临的主要问题是保留选定的值。例如,我有一个状态列表。NY,NJ,PA。当用户第一次选择PA时,应将其从下一次中删除。但是,留下价值。更新集合时,我会丢失初始选定值。