私はすでにこの解決策を検討しています: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>
DataContextが変更される理由を調査してはいけませんか? –
UserControl_LoadedイベントからDatacontextの割り当てをInitializeComponent()の直下に移動しようとしました。 DataContextのヌル問題が解消されました。私はブレークポイントを自分のコンバータ関数に入れて、割り当て中は一度だけ実行しますが、アイテムを追加/削除するときは決して実行しません。 –
振り返ってみると、本当にコンバータは必要ありません。私はどんな考えにもオープンです。 DataTriggersについても考えていますが、実装方法はわかりません。基本的には、ObservableCollectionであるDataSourceに0個の項目がある場合、TextBlockをCollaspeする必要があります –