2013-04-08 105 views
0

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

组合框编码如下:

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

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

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

的方法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; 
     } 
    } 

回答

0

一旦你添加项目到列表中,绑定的ItemSource到ComboBox,那么你不必refersh。

MyElements.ItemsSource = ListElements 
+0

但我已经绑定了我的组合框与xaml中的itemsSource。我需要在后面的代码中再次执行此操作吗?在构造函数中? – Vinc3nt 2013-04-08 08:00:18

+0

是的。您需要添加 – Sajeetharan 2013-04-08 08:20:59

+0

如果ListElements是ObservableCollection,则不需要。另外,上面的代码会破坏绑定。 – 2013-04-08 10:11:00

1

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

+0

我实现了接口INotifyPropertyChanged。但它似乎不起作用,因为我不得不点击其他页面并返回查看组合框中的新元素。 – Vinc3nt 2013-04-08 10:14:12

+0

您可以显示您填充ListElements属性的代码部分吗? – 2013-04-08 10:37:22

+0

我在问题中发布上下文更改时方法的代码。 – Vinc3nt 2013-04-08 11:12:37