【发布时间】:2017-04-04 06:31:16
【问题描述】:
我有一个自定义控件,其中有一个 IList 依赖属性
public IList SelectedItems
{
get { return (IList)GetValue(SelectedItemsProperty); }
set { SetValue(SelectedItemsProperty, value); }
}
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.Register("SelectedItems", typeof(IList),
typeof(MyCustomControl), new FrameworkPropertyMetadata(OnChangeSelectedItems)
{
BindsTwoWayByDefault = true
});
private static void OnChangeSelectedItems(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var usercontrol = d as MyCustomControl;
var selected = e.NewValue as IList;
if (selected != null && selected.Count > 1)
{
//do something
usercontrol.label1.Content= selected[0];
}
}
这个 Dependency 属性绑定到 Viewmodel 中的一个可观察集合,我的问题是,如果我在 Viewmodel 的构造函数中添加一些项目在视图模型可观察集合中 OnChangeSelectedItems 被调用,但是如果我在运行时在可观察集合中添加更多项目,OnChangeSelectedItems没有被调用。我在这里错过了什么。
编辑:工作解决方案
private static void OnChangeSelectedItems(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uc = d as UserControl1;
if (uc != null)
{
var oldObservable = e.OldValue as INotifyCollectionChanged;
var newObservable = e.NewValue as INotifyCollectionChanged;
if (oldObservable != null)
{
oldObservable.CollectionChanged -= uc.SelectedItemsContentChanged;
}
if (newObservable != null)
{
newObservable.CollectionChanged += uc.SelectedItemsContentChanged;
}
}
}
private void SelectedItemsContentChanged(object d, NotifyCollectionChangedEventArgs e)
{
//do something
}
【问题讨论】:
-
@Clemens 虽然肯定是重复的,但我认为链接的 Q/A 缺少一个好的标题,无法作为参考。
标签: c# wpf dependency-properties