Popup和ComboBox与Silverlight绑定

时间:2013-04-08 06:52:21

标签: silverlight binding combobox telerik 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;
        }
    }

2 个答案:

答案 0 :(得分:1)

如果ItemsSource绑定的集合实现了INotifyCollection的更改,也就是说,它是一个ObservableCollection&lt;&gt;,那么组合框将被通知集合的任何更改,你将不需要重新绑定或刷新,它将全部是自动的。

答案 1 :(得分:0)

将项目添加到列表后,将itemssource绑定到组合框,然后您不必刷新。

MyElements.ItemsSource = ListElements