我有一个关于我的组合框的性能问题。首先,我使用一个组合框来显示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