【问题标题】:WPF is it possible to temporarily change the Visibility Dependency Property of a DataGridColumn without destroying the original binding?WPF 是否可以在不破坏原始绑定的情况下临时更改 DataGridColumn 的可见性依赖属性?
【发布时间】:2014-04-11 17:06:15
【问题描述】:

我有一个 WPFToolkit DataGrid,其中至少有一个列绑定(通过代理对象,因为列不是可视树的一部分)到一个属性。我希望将所有列切换为可见,以便我可以基于 DataGridColumnHeader 执行计算(仅在其列第一次可见时创建)。完成计算后,我想重置列以使用之前设置的绑定。

我尝试获取和存储绑定表达式等,但没有任何乐趣。我也尝试使用 DependencyObject.SetValue() 方法非破坏性地更改属性值,但这并不能正确更改值,更不用说保留原始绑定了。

有什么想法吗?

【问题讨论】:

    标签: wpf binding datagrid dependency-properties


    【解决方案1】:

    您需要调用SetCurrentValue() 以便它不会清除绑定。 SetValue 销毁旧绑定。

    来自 MSDN:

    此方法由以编程方式设置其自身属性之一的值的组件使用,而不会禁用应用程序对属性的声明使用。 SetCurrentValue 方法更改属性的有效值,但现有的触发器、数据绑定和样式将继续工作。

    如果你有这个

    <TextBox Text="{Binding TestProperty}"/>
    

    您将使用您提供的任何内容覆盖绑定的 SetValue。但是,如果您调用 SetCurrentValue,将确保该属性采用给定值,但不会破坏任何绑定。

    请注意,您不应在依赖项属性的 setter/getter 中使用 SetCurrentValueSetCurrentValue 在您需要属性来获取给定值但又不想覆盖针对您的属性配置的任何绑定、触发器或样式的情况下更有用。

    【讨论】:

    • 谢谢。我会接受这个作为答案,但我使用的是 .Net 3.5,该方法不可用。我没有具体说明,所以你的答案是有效的,但你知道这个的 .Net 3.5 版本吗?我看不到任何候选人。
    猜你喜欢
    • 2014-03-31
    • 2014-10-19
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2012-08-06
    • 2011-09-02
    相关资源
    最近更新 更多