アイテムのコレクション(ObservableCollection)があるというこの要件がありますが、最初のアイテムのみを表示します。この要件は、ほとんどの場合、コレクションには1つのアイテムしか含まれないという事実から来ています。また、スペースの制限により、コレクションに複数のアイテムがある場合でも、アイテムの数、最初のアイテムの詳細(以前の状況と同じプレゼンテーション)、および...
を表示しますより多くのアイテムがあることをユーザーに示す記号。そして、マウスがUI要素の上にあるとき、ポップアップは最終的にすべてのアイテムを表示します。
私が考えることができる最初の解決策(より良い場合は他の人に提案してください)は、このコレクションにバインドし(ItemsControl
を使用しないで)、DataTemplateSelector
派生クラスを定義することです(いずれかを返す) DataTemplate
は、1つのアイテムのみを表示するか、DateTemplate
に...
があり、コレクション内のアイテムの数に基づいて詳細のポップアップが表示されます。 ContentTemplateSelector
。
しかし、私の質問:DataTemplate
の両方がXAMLでどのように表示され、コレクションの最初の項目のみを表示できるようになるのでしょうか。もちろん、ItemsControl
は使えません。
更新:
今、私はそれを機能させることができ、この質問を閉じることができることに同意しています(すでにいくつかの回答があるため、これ以上削除することはできません)。
コレクション内の特定のアイテムにバインドする方法は実際にはわかっていましたが、ここで混乱することはありませんでした。ある答えが示唆するように、ContentControl
を使用するべきだと感じました。しかし、(単一のインデックス付きアイテムではなく)コレクション全体にバインドし、DataTemplateSelector
を使用してコレクション内のアイテムの数に基づいて適切なDataTemplate
を選択する必要があるため、私は考えました。コードは次のようになります。
<ContentControl Content="{Binding MyCollection}"
ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
また、MyTemplateSelector
では、コレクションがリソースとして定義されており、MyCollection
の情報がないため、コレクションへの参照がないため、使用方法がわかりませんでした。ただし、非常に単純であることが判明し、DataTemplate
は名前やその他の参照を知らなくてもインデックス付きアイテムを参照できます。単にこのように:
<DataTemplate>
<TextBlock Text="{Binding [0].PropertyName}" />
<DataTemplate />
コレクションから1つのアイテムのみにバインドするには、次の構文を使用できます。
{Binding Items[0]}
または、コレクションから単一のアイテムのプロパティにバインドするには:
{Binding Items[0].Property}
プロパティパス構文の詳細については、リンクされたページのMSDNの Binding.Path Property ページをご覧ください。
•プロパティのインデクサーは、インデクサーが適用されるプロパティ名に続く角括弧内に指定できます。たとえば、節
Path=ShoppingCart[0]
は、プロパティの内部インデックスがリテラル文字列「0」を処理する方法に対応するインデックスにバインディングを設定します。複数のインデクサーもサポートされています。
これを試して
<ContentControl Content="{Binding YourCollection[0]}">
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
さて、パーティーに遅れましたが、とにかく2セントを共有したいと思いました。プレゼンテーションのニーズにより近い(XAML-)表示とビューモデルを使用する方がよいでしょう。
翻訳済み:既存のビューモデル(または生データ)とそのアイテムのコレクションを直接ビューにマッピングする代わりに、_YourItemViewModel FirstItem
_プロパティや_bool HasMore
_プロパティ。この2番目のビューモデルは、適切に動作することを確認するために簡単に単体テストを実行でき、ビュー内でテストが難しい問題を回避するために、ロジックが少ないビューに簡単にマップできます。