所以..我将TreeView绑定到ObservableCollection。 TreeView非常大,所以更新需要一些时间,但它工作正常。 所以..我决定使用IsAsync = True并在TreeView更新绑定时显示一些加载动画。但我得到这个错误: "无法动画' Background.Color'在一个不可变的对象实例上#34;
<TreeView Grid.Row="2" x:Name="LevelObjects"
Style="{StaticResource TreeViewStyle}"
ItemsSource="{Binding Path=Items, IsAsync=True}" >...
private ObservableCollection<LevelTreeItemViewModel> items;
public ObservableCollection<LevelTreeItemViewModel> Items
{
get
{
if (items == null)
{
items = GetLevelObjects();
}
return items;
}
}
LevelTreeItemViewModel是LevelTreeItemControl.xaml的VM,具有带有令人敬畏的动画的自定义样式。但显然它无法从其他线程初始化。如果我在LevelTreeItemControl.xaml中剪切了所有动画,它可以与IsAsync一起使用。如何解决?
答案 0 :(得分:0)
好的,我找到了解雇异常的原因: 就像我悲伤一样,TreeView的ItemSource是一个不同的UserControl,使用自定义样式和令人敬畏的动画。但是这些动画与通过RelativeSource选择IsSelected等属性有关。因此,当TreeView更新不同线程中的绑定(使用IsAsync = true)时,Items无法绑定到TreeViewItem.IsSelected属性。所以我把这些动画放在TreeViewItem风格中,效果很好!