【问题标题】:Is there a way to control the Dependency Property Binding order value updates?有没有办法控制依赖属性绑定顺序值更新?
【发布时间】:2014-03-03 15:41:33
【问题描述】:

有没有办法按照依赖属性接收值的顺序进行操作:

XAML:

         <Window   local:MyHelper.SomeAttachedProp="{Binding Something , Mode=OneWay}">
              <Grid>
                  <TextBlock Text="Let him go first" 
                             local:MyHelper.AnotherAttachedBooleanProp="True" />
              </Grid>
         </Window>

CS:

         public static class MyHelper 
         {
             propa .... 

             OnSomeAttachedPropChanged( .... )
             {
                 // I WANT TO GET HERE FIRST
             }

             propa ..... 

             OnAnotherAttachedBooleanPropChanged( .... )
             { 
                 // I WANT TO GET HERE SECOND 
             }                    
         }

目前我在 OnSomeAttachedPropChanged 之前到达 AnotherAttachedBooleanPropChanged 有什么方法可以控制更新依赖属性的顺序吗?

编辑:

我刚刚想起/意识到一件事,直接分配的 DP 会在绑定之前更新。

【问题讨论】:

  • 我从您的问题中假设您正在使用您发布的 Xaml 创建一个控件/窗口。在这种情况下,您要求更改 WPF 的内部呈现逻辑,这似乎不太可能。你不能重组你的代码来优雅地处理这个吗?如果您需要这方面的建议,解释一下您的两个 PropertyChanged 方法中发生的事情会有所帮助。

标签: c# wpf dependency-properties attached-properties


【解决方案1】:

我不知道有什么直接的方法可以做到这一点。我个人从来没有这样做的愿望。当您仅使用 OnXYZChanged 方法注册事件(这是 imo 最常见的情况)时,您可以注册一个更适合您所需代码执行顺序的事件。例如,在OnXYZChanged 注册到Loaded 事件并进行处理时,这些事件的顺序应该是从根到子的公平,因此顺序正确。

另一种方法是测试哪个被称为第二个,然后在其中执行您的逻辑。 另一个想法是使用Dispatcher 并在稍后确保所有内容都已加载时执行所有逻辑。

最后一个想法,你可以用VisualTreeHelperOnXYZChanged中的子元素遍历到底层窗口,先在窗口上设置属性,再为子元素处理逻辑。

@您的编辑:

如果你仔细想想,这是有道理的。必须创建可视化树并链接所有内容,然后 Binding 才能遍历树以找到合适的 DataContext。

【讨论】:

  • 感谢您的帮助 Lukas Kubi 上面的链接实际上使我得出了与我一直相同的结论,从来没有真正按照 DP 改变其价值观的顺序。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2011-12-18
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多