我的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;
}
}
答案 0 :(得分:1)
如果ItemsSource绑定的集合实现了INotifyCollection的更改,也就是说,它是一个ObservableCollection&lt;&gt;,那么组合框将被通知集合的任何更改,你将不需要重新绑定或刷新,它将全部是自动的。
答案 1 :(得分:0)
将项目添加到列表后,将itemssource绑定到组合框,然后您不必刷新。
MyElements.ItemsSource = ListElements