的内容我有一个奇怪的问题,一个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