0
<StackPanel DataContext="{StaticResource Employees1}">
    <ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" 
                  IsSynchronizedWithCurrentItem="True"/>
    <Label Content="{Binding Path=Count}"/>
    <Label Content="{Binding Path=Name}"/>
</StackPanel>

ラベルのバインディングはどのように解決されますか? 最初のラベルが Employee.Name にバインドされ、リストボックスの選択と同期されているのに対し、2 番目のラベルのコンテンツが Employees1.Count にバインドされている (Employee.Count にバインドされていない) ことはどのように決定されるのでしょうか? また、代わりに最初のラベルを Employee.Count にバインドしたい場合はどうすればよいでしょうか?

(Employee にはプロパティ Name (および場合によっては Count) があり、Employees1 は Employee 型の ObservableCollection です)。


編集:ここでの質問は、なぜ最初のラベルがObservableCollectionの従業員数を表示し、2番目のラベルがリストボックスで現在選択されているコレクション内の特定の従業員の名前を表示するのかということです. どうやら、最初のラベルはコレクション全体にバインドされ、2 番目のラベルはコレクション内の特定の従業員にバインドされます。しかし、その理由と、この動作を制御する方法。

4

3 に答える 3

1

MSDN Data Binding Overview、 Binding To Collections、セクション「Current Item Pointer」から:

WPF はビュー (指定したビュー、またはコレクションの既定のビュー) を使用してのみコレクションにバインドするため、コレクションへのすべてのバインドには現在のアイテム ポインターがあります。

セクション「Master-Detail Binding Scenario」:

これが機能するのは、シングルトン オブジェクト (この場合は ContentControl) がコレクション ビューにバインドされると、ビューの CurrentItem に自動的にバインドされるためです。

この例では、2 番目の Labelが Employees1 コレクションの既定のビューの現在のアイテムに自動的にバインドされます。最初の Label もこのようにバインドしますが、item オブジェクトにはプロパティがないため、Count明らかにCountコレクション自体のプロパティへのバインドにフォールバックします。ただし、後者の動作がどこかに文書化されているかどうかはわかりません。

于 2012-12-05T16:39:12.507 に答える
0

質問に答えてみます。

ObservableCollection にはプロパティ Count があります。

2 番目のラベルで単一のプロパティを取得する場合は、いくつかの仮定があります。
他のバージョンの .NET では同じ動作が得られない場合があります。
単一の値を表示するコントロールをコレクションにバインドしないでください。

リストボックスから選択したアイテムが必要な場合は、このリンクを参照してください

ここにリンクの説明を入力

于 2012-12-05T16:06:00.967 に答える
0

Blamが言うように-ラベルはリストボックスと関係がありません-ここでやろうとしていることは、プロパティCountとNameを持つEmployeesのobservableCollectionをリストボックスにバインドすることだと思います..

これを行うには、リストボックスに ItemsTemplate が必要です

<ListBox ItemSource={Binding Employees1}>
<ListBox.ItemTemplate>
  <DataTemplate>
    <StackPanel Orientation="Horizontal">
        <Label Content="{Binding Count}" />
        <Label Content="{Binding Name}" />

    </StackPanel>
  </DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
于 2012-12-05T15:39:58.230 に答える