【问题标题】:WPF Binding is delayed somehow (Error)WPF 绑定以某种方式延迟(错误)
【发布时间】:2011-12-18 16:30:18
【问题描述】:

我的 WPF 应用程序有问题。不知何故,我的 WPF 控件中的两个(几个)绑定似乎没有立即应用。当我使用Snoop 查看可视化树时,突然应用了绑定并且一切正常。

这可能是什么原因?

XAML 代码在这里:

<Grid Grid.Column="1" Margin="5">
    <m:Map ZoomLevel="12" Center="{Binding MapCenter, Mode=TwoWay}">
        <m:Map.CredentialsProvider>
            <m:ApplicationIdCredentialsProvider ApplicationId="???"/>
        </m:Map.CredentialsProvider>

        <m:Pushpin Location="{Binding Station.Location, Mode=TwoWay, Converter={StaticResource debugConverter}}" />
    </m:Map>
    <Button Command="{Binding CenterOnAddressCommand, PresentationTraceSources.TraceLevel=High, Converter={StaticResource debugConverter}}"
        Content="Adresse zentrieren" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,20" />
</Grid>

Map.Center 属性的绑定有效,而其他两个绑定(在 Pushpin 和 Button 上)无效。地图控件来自必应地图 WPF 控件。

编辑: 经过进一步调查后,我尝试删除与 Map.Center 属性的绑定,然后一切正常(除了将地图居中在某个位置之外)。这怎么可能?

提前致谢!

【问题讨论】:

  • 转换器甚至没有被调用?
  • 没错,当我查看 Snoop 中的绑定时它们会被调用,但在那之前不会:(.
  • 并不是说我知道如何处理这些信息,但是如果您给它一个错误的绑定名称,PresentationTraceSources 是否会给您一个错误?
  • 不,如果我绑定到一些不存在的属性,它不会改变任何东西:(。
  • 会不会出现打开窗口时地图控件不可见的情况?如果是这样,它可能在可见之前没有被模板化,而用 Snoop 触摸它可能会触发初始化。

标签: wpf binding delay


【解决方案1】:

两个提示:

  1. 尝试提高“输出”窗口中显示的 WPF 消息的详细程度。您可以通过转到Tools &gt; Options &gt; Debugging &gt; Output Window &gt; WPF Trace Settings 并将Data Binding 更改为All 之类的方式来执行此操作。

  2. UpdateSourceTrigger 属性添加到失败的绑定 - 可能是绑定没有被告知更新。也许 Snoop 会触发应用程序范围的绑定更新。

我希望这可以帮助您找到问题的原因。

【讨论】:

  • 1.没有绑定错误(因为在我选择 snoop 中的元素之前,绑定甚至没有“应用”(至少我认为是这样)。2.添加 UpdatSourceTrigger 没有帮助:(。我尝试删除绑定到 Map.Center 属性,然后一切正常(除了将地图集中在一个位置上)。这怎么可能?
  • 详细绑定输出是否为您提供任何信息(不一定是错误),表明您遇到问题的绑定正在工作?尝试比较具有 Map.Center 属性绑定和没有属性绑定时的输出。您可能会看到一些有用的差异。
【解决方案2】:

m:Map 控件呢?这是在初始化时尊重这些值吗?即,如果你给属性一个固定的值是有效的。

尝试Reflector验证Map控件的代码。

【讨论】:

  • 是的,它确实尊重固定值。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 2016-10-24
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2012-05-21
  • 2021-03-01
相关资源
最近更新 更多