我正在創建一些附加屬性,其中之一是DataTemplate。在DataTemplate中應該有,我已經在它創造了限定,使得這一切的XAML聲明看起來像一個FrameworkElement的:DataContext更改並不總是導致從DataTemplate.LoadContent類的綁定更新
<SomeControl m:ItemsSource="{Binding Source}">
<m:MyTemplate>
<DataTemplate>
<m:MyClass SomeDependency="{Binding Path}"/>
</DataTemplate>
</m:MyTemplate>
</SomeControl>
在爲MyTemplateProperty變化回調的代碼,它的來源,並呼籲每一個項目遍歷DataTemplate上的LoadContent()。然後,它設置在DataContext從源通過LoadContent()返回到項目類:
private static void MyTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var items = (d as SomeControl).GetValue(ItemsSourceProperty) as IList;
var template = e.NewValue as DataTemplate;
foreach(var item in items)
{
var myClass = template.LoadContent() as MyClass;
myClass.DataContext = item;
}
}
這裏奇怪的是,以這種方式創建的MyClass一審獲取綁定更新(SomeDependencyProperty更新與價值那就是ItemsSource中的項目),但其餘的實例都沒有更新。
我覈實,這應該正確地創建MyClass的自己,而不是LoadContent調用和設置使用BindingOperation.SetBinding像綁定工作:
foreach(var item in items)
{
var myClass = new MyClass();
BindingOperations.SetBinding(myClass, MyClass.SomeDependencyProperty, new Binding("Path");
myClass.DataContext = item;
}
有誰知道爲什麼LoadContent通話似乎產生對象DataContext更改時不都更新其綁定? LoadContent調用與完全自己創建對象有什麼不同?