WPF - ListBox异步绑定到带动画的项目

时间:2014-08-21 13:18:09

标签: wpf animation asynchronous binding

所以..我将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一起使用。如何解决?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解雇异常的原因: 就像我悲伤一样,TreeView的ItemSource是一个不同的UserControl,使用自定义样式和令人敬畏的动画。但是这些动画与通过RelativeSource选择IsSelected等属性有关。因此,当TreeView更新不同线程中的绑定(使用IsAsync = true)时,Items无法绑定到TreeViewItem.IsSelected属性。所以我把这些动画放在TreeViewItem风格中,效果很好!