2012-04-09 20 views
0

私はビジュアル状態を含むリストボックスアイテムテンプレートを持っています。私は、状態をオン/オフ状態のいずれかに設定するDisplayStateBehaviorsを持っています。私の実装はわずか1/2です。最初の表示では、DataContextの値に関係なく、基本状態がアクティブです。 DataContext内のデータが変更されると、適切な状態がアクティブになります。DisplayStateBehaviorはリストボックスアイテムテンプレートの状態遷移を最初に適用していません

リストボックスの最初の表示時に適切な状態を表示する方法を教えてください。

セキュリティ上の理由から、XAMLコードまたはView-Modelコードをコピー/貼り付けすることはできません。

編集::実際のコードをコピーして貼り付けることはできませんが、以下のスケルトンでうまくいけば問題が再現されます。

<DataTemplate x:Key="MyObjectItemTemplate"> 
    <Grid> 
    <VisualStateManager.VisualStateGroups> 
     ... blend goodness ... 
    </VisualStateManager.VisualStateGroups> 
    </Grid> 
</DataTemplate> 

データコンテキストがメインUIでリストボックスのItemsTemplate属性に関連付けることでデータ・テンプレートに渡される:グローバルに可視資源ファイルで

<ListBox ... ItemTemplate="{DynamicResource MyObjectItemTemplate}" .../> 
+1

はDisplayStateBehaviorsについて多くを知らないが、クイックフィックスでの私の最初の試みは、DataContextのは、あなたがすべてを設定することになるだろう知っている時にバインドされているプロパティにInvokePropertyChangedになります。あなたのDisplayStateBehaviorがdatacontextのすべてのプロパティに依存していて、datacontextオブジェクトが完全に構築される前にバインドされている場合、datacontextが再び変更されるまで、それ自身をリフレッシュする別の機会はありません。 – Alain

+0

これはこれを嫌う私の計画でしたが、必要なようには見えません。これは私の症状が間違っているか、間違ったアプローチをとっているような気がしますが、これは私の心では一般的な使用例です。もし私のアプローチに欠陥があるなら、私はむしろ「一度正しい」ことを望んでいます。 – PatrickV

+0

これはコードなしでは答えにくいです。私は "DisplayStateBehaviorとは何か"、 "DataContextの形状は何ですか?"、 "DataContextはどのように提供されているか"といった質問を持っています。間違ったことを行うチャンスはたくさんありますが、コードなしでは間違いが起きる可能性はありません。 –

答えて

0

私の問題が見つかりました。それが他の人を助ける場合、私がそれを修正するためにしたことは、DataTemplateの勇気をUserControlに抽出することでした。これは私が期待したようにすべてが機能するようにした。 DataTemplateはまだ存在していますが、まだ関与していますが、ユーザーコントロールの要素は1つだけです。ビジュアル状態はすべてユーザーコントロールの一部です。分離されたファイルMyUserControl.csで

<DataTemplate x:Key="MyObjectItemTemplate"> 
    <MyNamespace:MyUserControl/> 
</DataTemplate> 

<UserControl ... x.Class="MyNamespace.MyUserControl" ...> 
    <Grid> 
    <VisualStateManager.VisualStateGroups> 
     ... blend goodness ... 
    </VisualStateManager.VisualStateGroups> 
    </Grid> 
</UserControl> 

データコンテキストがItemsTemplateの属性に関連付けることでデータ・テンプレートに渡される:グローバルに可視資源ファイルで

メインUIのリストボックス。

<ListBox ... ItemTemplate="{DynamicResource MyObjectItemTemplate}" .../> 
+0

あなたの質問はあなたの答えに答えて数えます。 –

+0

私はそれをすることができるまでに2日間の待機期間があります。 – PatrickV

関連する問題