C# DataContext更改并不总是导致DataTemplate.LoadContent类上的绑定更新
我正在创建一些附加属性,其中一个是DataTemplate。DataTemplate应该有一个我在其中创建并定义的FrameworkElement,因此所有这些的XAML声明如下所示:C# DataContext更改并不总是导致DataTemplate.LoadContent类上的绑定更新,c#,wpf,C#,Wpf,我正在创建一些附加属性,其中一个是DataTemplate。DataTemplate应该有一个我在其中创建并定义的FrameworkElement,因此所有这些的XAML声明如下所示: <SomeControl m:ItemsSource="{Binding Source}"> <m:MyTemplate> <DataTemplate> <m:MyClass SomeDependency="{Binding Path}"/>
<SomeControl m:ItemsSource="{Binding Source}">
<m:MyTemplate>
<DataTemplate>
<m:MyClass SomeDependency="{Binding Path}"/>
</DataTemplate>
</m:MyTemplate>
</SomeControl>
奇怪的是,以这种方式创建的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调用与自己创建对象有什么不同?一位同事指出,MyClass的实例没有任何内容。添加引用这些实例的方法解决了我看到的问题。它没有完全解释为什么第一个实例会得到更新,而其余的不会,但它已经解决了我的问题
foreach(var item in items)
{
var myClass = new MyClass();
BindingOperations.SetBinding(myClass, MyClass.SomeDependencyProperty, new Binding("Path");
myClass.DataContext = item;
}