0

我对我的 ComboBox 的评论有疑问。首先,我使用组合框来显示 IEnumarale 中的所有元素。然后,使用一个打开弹出窗口的按钮,用户可以向该列表添加一个元素。问题是当用户验证他的选择并关闭弹出窗口时,该元素不会自动添加到 ComboBox 而不刷新页面。

组合框编码如下:

<telerik:RadComboBox x:Name="MyElements"
                        SelectionChanged="MyElements_OnSelectionChanged" 
                        ItemTemplate="{StaticResource ComboBoxElementsTemplate}"
                        ItemsSource="{Binding ListElements}"/>

列表的构造函数是:

    public IEnumerable<Element> ListElements
    {
        get { return _listElements; }

        set
        {
            _listElements= value;
            RaisePropertyChange("ListElements");
        }
    }

以及用于验证弹出窗口中用户选择的按钮背后的代码:

private ObservableCollection<HistoriqueElement> elementList = null;

private void SelectClick(object sender, RoutedEventArgs e)
    {
        var element= _GridList.SelectedItem as HistoriquePasserelle;
        if (_GridList.SelectedItem != null)
        {
            var installation = this.DataContext as Installation;
            if (installation != null && element!= null)
            {
                element.DateFin = DateTime.Now;
                HistoriqueElement newElement= new HistoriqueElement()
                {
                    Installation = installation,
                    ContactAction = GlobalActeurs.Current.CurrentContact,
                    Date = DateTime.Now,
                    Element = element.Element,
                    StatutElement = element.StatutElement ,
                    Owner= element.Owner,
                };
                elementList.Remove(element);
            }
            MainPage.ClosePopup();
        }
    }

当用户在弹出的列表显示中选择一个新元素并验证他的选择时,他会返回到主页,但他的选择不会自动添加到组合框中。

我可以向您发布代码的任何部分。先感谢您。

方法 OnDataContextChanged :

public override void OnDataContextChanged(DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue is Installation)
        {
            if (MainPage.CurrentInstallation.LastElements != null) 
            {
                ListElements = MainPage.CurrentInstallation.LastElements;
                MyElements.SelectedIndex = 0;
            }
            else
            {
                LoadOperation<Element> operation =
                    _context.Load(_context.GetCurrentElementsByInstallationId(MainPage.CurrentInstallation.Id));
                this._busy.IsBusy = true;
                operation.Completed += delegate
                {
                    this._busy.IsBusy = false;
                    if (operation.ManageError())
                    {
                        ListElements = operation.Entities;

                    }
                };
            }
            this.DataContext = this;
        }
        else
        {
            RaisePageTitleChanged();
            if (MainPage.CurrentInstallation == null)
                return;
        }
        if (MyElements.SelectedItem == null && MyElements.Items.Any())
        {
            MyElements.SelectedIndex = 0;
        }
    }
4

2 回答 2

1

如果 ItemsSource 绑定实现 INotifyCollection 的集合发生了变化,也就是说,它是一个 ObservableCollection<>,那么组合框将被通知集合的任何变化,你不需要重新绑定或刷新,这一切都是自动的。

于 2013-04-08T10:08:38.293 回答
0

将项目添加到列表后,将 itemsource 绑定到组合框,然后您不必引用。

MyElements.ItemsSource = ListElements
于 2013-04-08T07:10:23.463 回答