由于某种原因,这个事件只会被调用一次,并且不会在下一次VisibleItems更改时触发。
XAML:
<cc:MyFilterList VisibleItems="{Binding CurrentTables}" />
CurrentTables是MyViewModel中的一个依赖属性。CurrentTables经常发生变化。我可以将另一个WPF控件绑定到CurrentTables,并在UI中看到更改。
这是我使用PropertyChangedCallback连接VisibleItems的方式
public static readonly DependencyProperty VisibleItemsProperty =
DependencyProperty.Register(
"VisibleItems",
typeof(IList),
typeof(MyFilterList),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(VisiblePropertyChanged))
);
public IList VisibleItems {
get { return (IList)GetValue(VisibleItemsProperty); }
set { SetValue(VisibleItemsProperty, value); }
}
通过进入“VisiblePropertyChanged”方法,我可以看到它在第一次设置“CurrentTables”时被触发,但是在随后的更改中没有被触发。
更新:
由于有些人质疑了修改“CurrentTables”的方式,实际上每次更改时都会完全重新分配它:
OnDBChange()...
CurrentTables = new List<string>(MainDatabaseDataAdapter.GetTables(this.SelectedServer, this.SelectedDatabase));
这行代码会在每次修改时被调用,但是我的VisiblePropertyChanged处理程序仅在第一次被调用。
更新:
如果我直接赋值VisibleItems,处理程序就会每次都被调用!
TestFilterList.VisibleItems = new List<string>( Enumerable.Range(1, DateTime.Now.Second).ToList().Select(s => s.ToString()).ToList() );
看起来问题出在 DependencyProperty (VisibleItems) 监听另一个 DependencyProperty (CurrentTables) 上。一些绑定只在首次属性更改时生效,但在随后的更改中不起作用?尝试使用一些人建议的 Snoop 来检查此问题。
VisibleItems
属性在没有调用属性更改回调函数的情况下实际上会更改为另一个值吗? - Rick Sladkey