2

2 つのコントロールに同時に表示したいアイテムの ObservableCollection があります。1 つは現在の選択のプロパティを編集し、アイテムを追加および削除するためのもので、もう 1 つは現在の選択を強調表示してコレクション全体を表示するためのものです。

この目的のために、アイテムにバインドする CollectionViewSource を作成し、コントロールでそれにバインドします。

<UserControl>
  <UserControl.Resources>
    <CollectionViewSource x:Key="MyCollectionViewSource" Source="{Binding MyItems}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="MyProperty" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
  </UserControl.Resources>

  <Grid>
    <my:PropertiesControl TheItems="{Binding Source={StaticResource MyCollectionViewSource}}" >
    <my:DisplayControl TheItems="{Binding Source={StaticResource MyCollectionViewSource}}" >
  </Grid>
</UserControl>

問題は、DisplayControl では、XAML では指定できない特別な方法でアイテムを配置したいということです。アイテムの配置は、それ自体のプロパティだけでなく、コレクション内の他のアイテムの配置にも依存します。したがって、アイテムがコレクションに追加またはコレクションから削除されるたびに、またはコレクション内のアイテムの 1 つのプロパティが変更されるたびに、再配置コードを実行する必要があります。

私は疑問に思っていましたが、これについて推奨される方法は何ですか? ItemsControl.ItemsSource に触発されて TheItems プロパティを IEnumerable 型にすることを考えていましたが、どうすればよいかわかりません。

どんな入力でも大歓迎です!

4

2 に答える 2

0

ディスプレイコントロールのコードビハインドでは、自分で作成したカスタムコントロールであると想定していますが、「TheItems」を取得して、ハートのコンテンツに並べ替えることができます... ObservableCollectionを使用しているため、 CollectionChangedイベントを実行し、新しいアイテムが追加/削除され、その時点で並べ替えられるという条件(渡されるイベント引数を参照)を確認します。

于 2011-11-03T14:56:05.507 に答える