私はまだ非常に新しく、最初の本格的なデータバインディングを試しています。私はそれがどのように機能するかについてたくさん読みましたが、この具体的な例に苦労しています。私はこれで見つけたすべてのリンクを読み込もうとしましたが、ほとんどの情報源は重要な場所で少し不正確になる傾向があります。だからここに行きます:
-私のアプリケーションは、タイプ「リスト」の変数「PlayerList」を動的に生成します。ここで、「Player」は複雑なオブジェクトです。
-これをBindingを介してリストボックスに表示したい。明らかに、Playerは複雑なオブジェクトなので、そのためのDataTemplateを作成したいと思います。したがって、「Window1.xaml」には次のようなものがあります。
<ListBox
Name="ListBox_Players"
ItemsSource="{Binding Source={StaticResource PlayerListResource}}"
ItemTemplate="{StaticResource PlayerTemplate}">
</ListBox>
'App.xaml'には次のようなものがあります。
<DataTemplate x:Key="PlayerTemplate"> <!-- DataType="{x:Type Player}" -->
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=name}"/>
<TextBlock Text=", "/>
<TextBlock Text="{Binding Path=nrOfTabls}"/>
</StackPanel>
</DataTemplate>
もちろん、このテンプレートは後でより冗長になります。上記のように、PlayerList変数のリソースを作成しようとしましたが、まだ管理していません。つまり、smthnです。このような
<src: XXX x:Key="PlayerListResource"/>
XXXの場合、私が理解しているように、Resource変数のクラスを入力する必要があります。私は試した
List<Player>, List<src:Player>
など、しかしobv。XAMLで「<、>」文字に問題があります。
また、別の問題があります。リソースを宣言するのではなく、直接バインドして(つまり、C#で「ListBox_Players.ItemsSource = PlayerList;」と記述して)、「ItemTemplate」宣言を削除し、PlayerクラスのToString()メソッドを上書きして出力します。バインディングが機能することを確認できたプレーヤーの名前(つまり、リストボックスにプレーヤー名のリストが表示されます)。しかし、テンプレートを再度挿入すると、「」、「テンプレートが機能しません」のみが表示されます。