2011-07-05 6 views
0

私はWindows Phone 7のカスタムコントロール「TranscriptCell」を持っています。私はそれにいくつかのDependencyPropetysを追加しました。これは完璧に動作します。私はvoid override OnApplyTemplate()メソッドにブレークポイントを追加した、と私のXAMLファイルで、私はこのようなコントロールを使用する場合:DataTemplateでOnApplyTemplateが無期限に呼び出されています

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

ブレークポイントは、正確に一度トリガされると、すなわち方法void OnApplyTemplate()は1回だけ呼び出されます。私はような何かが

、:

<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()メソッドは無限に呼び出されています。なぜこうなった?

EDIT:リスト内の各項目に対して初期化されている2つの項目があるため、段階的にブレークポイントを実行した後、OnApplyTemplate()がインスタンスごとに何度も呼び出されているようです。すなわち、方法は、instance1::OnApplyTemplate()のように呼び出され、次にinstance2::OnApplyTemplate()、次にinstnace1::OnApplyTemplate() ...などと無限に続きます。

答えて

2

ブレークポイントを削除し、必要なデバッグ出力をSystem.Diagnostics.Debug.WriteLine()経由で追加します。
ブレークポイントから抜け出すと、UpdateLayoutが呼び出される可能性があります。 (私はこれが他のシナリオでは何度も起こるのを見てきました)

その方法に侵入していないときにクイックテストとして、これを実行しますか?

+0

はい、それはまだありません。これは、私が実際に私のコードのバグのためにListBoxのDataContextを常に更新していたためです。だから、それは実際には少し誤解です。私はあなたに私の質問に答えるために時間をとってupvoteを与えるでしょうが、私は答えとしてマークすることはできませんね(とにかくあなたはどんな代理人も必要としません:))。質問に答える時間をとってくれてありがとう:) –

関連する問題