如何禁用ContentControl中的所有绑定/触发。

5
在这种情况下,我有一个包含许多控件的网格,按钮、画布、绘图、动画等都绑定到视图模型上。当我将网格的可见性设置为折叠时,我想禁用其子元素及其子元素的所有dataTrigger、trigger和binding,以便不浪费CPU周期(因为有一个繁重的动画一直在运行),也不会崩溃!
我正在使用一个行为:http://www.microsoft.com/design/toolbox/tutorials/pathlistbox/carousel.aspx,但似乎存在一个bug,即在使用列表框时,如果将其折叠,则会导致应用程序崩溃。因此,我需要禁用激活行为的数据绑定。
从我所找到的信息: Does Visibility = IsCollapsed skip the data-binding part?
  • 您的控件模板不会被应用
所以唯一的方法是将所有内容放在控件模板中:
<ContentControl  Visibility="Collapsed">
    <ContentControl.Template>
        <Grid Name="Heavy Animation control">
            <!--- animations, triggers, bindings ,  -->
        </Grid>
    </ContentControl.Template>

所以这样做模板将不会被应用,直到我切换可见性,所有内容都将变得不对。

我的问题是:这是否是解决这个问题的正确方法?


1
DataContext 更改为未被更新的内容? - Peter Ritchie
1个回答

1

是的。由于ContentControl已折叠,直到您将可见性更改为可见之前,模板才不会应用。

但是,我很想知道您的网格设置方式以及是否可以进一步拆分,以便在需要时仅初始化按钮、画布、绘图、动画等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接