0

スタック パネルの一部のフィールドを空にできるアイテム テンプレートを作成しようとしています。空のときは、可視性を折りたたみに設定したいと思います。トリガーを入れてみましたが、うまくいかないようで、WPFのこの部分にあまり慣れていません

また、バインディングの特定の値が true の場合に、このアイテムの背景色を変更したいと考えています。それは同じことですか?

ありがとう。

4

2 に答える 2

1

ViewModel を使用することは、この種の問題を解決する 1 つの方法です。

データが Item クラスに格納されている場合は、ItemViewModel を作成して、Items コントロールに表示するために Item をラップします。ViewModel クラスは、表示を更新するために変更された INotifyProperty を実装し、セッターは適切なプロパティ名を渡して PropertyChanged イベントを発生させます。必要に応じて、相互に関連する変更されたフィールドのプロパティ変更イベントを発生させることもできます。

Description が空のときに、折りたたまれたフィールドに Item.Description を表示したいとします。ViewModel プロパティは次のようになります

public string Description
{
    get { return mItem.Description; }
    set { mItem.Description = value; Notify("Description"); Notify("DescriptionVisibility"); }
}

public Visibility DescriptionVisibility
{
    get { return string.IsNullOrEmpty(mItem.Description) ? Visibility.Visible : Visibility.Collapsed; }
}

XAML で、テキスト プロパティを Description にバインドし、Visibility プロパティを DescriptionVisibility にバインドします。

于 2009-10-09T21:55:52.353 に答える
0

コンテンツが null の場合にアイテムを非表示にする場合はControlTemplate、そのListBoxItem(またはListViewItem、使用しているアイテム コンテナーに応じて別のもの) を再定義し、次のDataContextように、をターゲットとするトリガーを使用する必要があります。

<DataTrigger Binding="{Binding}" Value="{x:Null}">
  <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

ただし、Filterデリゲートを使用しCollectionViewて空のアイテムをビューから直接除外し、未使用のアイテムが折りたたまれないようにすることをお勧めします。

たとえば、コード ビハインドで null オブジェクトを除外するには、次を使用します。

CollectionViewSource.GetDefaultView(yourCollection).Filter = o => o != null;
于 2009-10-09T21:51:05.910 に答える