的內容我有一個奇怪的問題,一個ListBox: 我把它綁定到不實現INotifyCollectionChanged(不可能的,因爲它的項目要求動態生成)的集合:列表框不更新的ItemsSource
IEnumerator IEnumerable.GetEnumerator()
{
foreach (var metaData in Metadata.Where((m) => m.IsEnabled))
{
yield return new DynamicPropertyValue(this, metaData);
}
}
因此,當ISVISIBLE的ListBox的變化,我試圖武力將其設置爲null,以更新的ItemsSource然後更新綁定:
static void ItemsControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (true.Equals(e.NewValue))
{
var element = (ItemsControl)sender;
var bindingExpression = BindingOperations.GetBindingExpression(element, ItemsControl.ItemsSourceProperty);
if (bindingExpression != null)
{
element.SetCurrentValue(ItemsControl.ItemsSourceProperty, null);
bindingExpression.UpdateTarget();
var count = element.ItemsSource.OfType<object>().Count();
if (count != element.Items.Count)
{
Debug.WriteLine("Wrong number of items");
}
}
}
}
當的ItemsSource設置爲null,ItemsControl的呢不含如預期的那樣,任何物品都已被取消,並且Items集合已被清空。但是,再次應用綁定時,所有舊項目都會恢復。 Items集合包含與之前相同的實例。 GetEnumerator方法被調用,但新項目被忽略。
我不明白爲什麼這是這種情況,或者我可以如何避免ItemsControl緩存它的項目。
亞歷
爲什麼不只是創建一個新的集合並將其分配給ItemSource屬性? – Clemens 2014-10-01 08:18:27
'element.SetCurrentValue(ItemsControl.ItemsSourceProperty,null);'我相信這隻會將您的'ItemsControl.ItemSource'設置爲'null',您的代碼在哪裏更新集合? – Bolu 2014-10-01 08:30:06
集合可以在多個(未連接的)對象上共享。當我在一個位置替換它時,我將不得不在任何地方替換它。但我無法訪問所有這些地方。 – LionAM 2014-10-01 08:33:51