在DataTemplate中无限调用OnApplyTemplate

时间:2011-07-05 10:48:45

标签: windows-phone-7

我有一个名为'TranscriptCell'的自定义Windows Phone 7控件。我已经添加了一些DependencyPropetys,它工作得非常好。我在void override OnApplyTemplate()方法中添加了断点,在我的XAML文件中,我使用这样的控件:

<EUILib:TranscriptCell Title="Hello World" HostO="MSI India" />

断点只触发一次,即方法void OnApplyTemplate()只被调用一次。

然而,当我做类似的事情时:

<ListBox x:Name="TranscriptList" ItemsSource="{Binding TranscriptItems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <EUILib:TranscriptCell
                Title="{Binding ActTitle}"
                HostO="{Binding Host}"
            />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

断点正在无休止地触发。当我测试时,绑定的源提供了一个完整的2项列表,并且确认它是完全正确的2.仍然,OnApplyTemplate()方法被无休止地调用。为什么会这样?

编辑:从断点开始逐步执​​行后,似乎由于为列表中的每个项目初始化了2个项目,因此每次都会一次又一次地调用OnApplyTemplate()实例。即,这些方法被称为instance1::OnApplyTemplate(),然后是instance2::OnApplyTemplate(),然后是instnace1::OnApplyTemplate() ......等等,无休止地等等。

1 个答案:

答案 0 :(得分:2)

删除断点并通过System.Diagnostics.Debug.WriteLine()添加所需的调试输出 退出断点可能会触发对UpdateLayout的调用。 (我在其他场景中看到过这种情况很多次。)

作为一个快速测试,当你没有进入那种方法时,它仍然会这样做吗?

相关问题