當我們使用自定義控件時,在使用虛擬化時,我發現過去非常類似這樣的問題,這些自定義控件實際上並不期望在顯示它們的DataContext時被更改。
如果你的面板是正確的(就像聽起來那樣),將新的DataContexts交給重用對象,那麼它聽起來像重用的對象沒有處理DataContext正確更改。 (這個'渲染'電話你談論然後拿起新的DataContext和顯示。)
如果你在控制中使用純數據綁定,然後我有點難住。 (你的面板在他們有了新的DataContext之後是否重新測量/排列控件?)
對於我們來說,修正是讓我們的控件在DataContext更改時偵聽。 (這對於調試虛擬化面板以測試DataContext是否正確進入也很有用。)
不幸的是,OnDataContextChanged方法在Silverlight中未公開,但您仍然可以通過綁定來了解DC更改。
public MyClass()
{
InitializeComponent();
SetBinding(MyDataContextProperty, new Binding());
}
private static readonly DependencyProperty MyDataContextProperty =
DependencyProperty.Register("MyDataContext",
typeof(object),
typeof(MyClass),
new PropertyMetadata(DataContextChanged));
private static void DataContextChanged(
object sender,
DependencyPropertyChangedEventArgs e)
{
MyClass source = (MyClass)sender;
source.OnDataContextChanged();
}
private void OnDataContextChanged()
{
// My DataContext has changed; do whatever is needed.
// re 'render' in your case?
}