用Silverlight绑定Popup和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;
        }
    }

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

一旦你将项目添加到列表中,将itemsource绑定到组合框中,那么你就不必刷新了。

MyElements.ItemsSource = ListElements

最新更新