2011-12-13 8 views
0

私はすでにこの解決策を検討しています:Show if ItemsControl.ItemsSource is null。 Codebehindを介してItemsControlのDataContextをObservableCollectionに設定しました。ロードフェーズ中に一度だけ解決する以外はすべて正常に動作します。項目コントロールに開始項目がいくつかある場合、テキストは消えますが、後で表示されません。空の場合はテキストが表示されますが、後でアイテムを追加すると消えません。 ItemsSourceも試してみましたが、運はありません。私は現在、コントロールテンプレートを使用していることを認識しています。私は相対ソースTemplatedParentを使用できますが、私は確信しています。さらにテストすると、項目が自分のitemscontrolに表示されていても、リスト内の項目を追加/削除しようとするとコンバータ機能が起動しないように見えます。ItemsControl DataContextバインディングエラー

<ItemsControl x:Name="MedicationList" ItemTemplate="{StaticResource UserTemplate}"> 
    <ItemsControl.Template> 
    <ControlTemplate TargetType="ItemsControl"> 
     <Grid> 
     <TextBlock Text="No Items to Display" Visibility="{Binding DataContext, ElementName=MedicationList, Converter={StaticResource AnyItemsToVisibilityConverter}}" /> 
     <ItemsPresenter /> 
     </Grid> 
    </ControlTemplate>  
    </ItemsControl.Template> 
</ItemsControl> 
+0

DataContextが変更される理由を調査してはいけませんか? –

+0

UserControl_LoadedイベントからDatacontextの割り当てをInitializeComponent()の直下に移動しようとしました。 DataContextのヌル問題が解消されました。私はブレークポイントを自分のコンバータ関数に入れて、割り当て中は一度だけ実行しますが、アイテムを追加/削除するときは決して実行しません。 –

+0

振り返ってみると、本当にコンバータは必要ありません。私はどんな考えにもオープンです。 DataTriggersについても考えていますが、実装方法はわかりません。基本的には、ObservableCollectionであるDataSourceに0個の項目がある場合、TextBlockをCollaspeする必要があります

答えて

3

あなたはdatacontext/itemssourceとして何を使用していますか?それが私が期待する通りObservableCollectionであれば、 "Count"プロパティにバインドしてから、トリガーを使用して必要に応じてテキストブロックを折りたたむことをお勧めします。

バインディングが現在更新されていないのは、DataContext自体が実際に変更されていないためです。 DataContextのプロパティが変化しているので、正しいプロパティ(数)にバインドするとバインディングが更新されます。

このコードスニペットは動作するはずです:

<ControlTemplate TargetType="ItemsControl"> 
    <Grid> 
    <TextBlock x:Name="txtBlock" Text="No Items to Display" Visibility="Collapsed" /> 
    <ItemsPresenter /> 
    </Grid> 
    <ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=Count}" Value="0"> 
     <Setter TargetName="txtBlock" Property="Visibility" Value="Visible"/> 
    </DataTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

データトリガを使用することにより、あなたが視界に数値を変換し、あなたの.xamlですべてを保つために、コンバータの必要性を回避することができます。

+0

パーフェクト!これは私が探していた正確な解決策です!シンプルで清潔。どうもありがとうございます。 –

関連する問題