我还是很新,并尝试了我的第一个严肃的数据绑定。我已经阅读了很多关于它是如何工作的,我只是在努力解决这个具体的例子。我试图阅读我可以找到的所有链接,但大多数来源往往在关键点有点不精确。所以这里:
-My Application动态生成一个类型为'List'的变量'PlayerList',其中'Player'是一个复杂的对象。
- 我想通过Binding在ListBox中显示它。 Obvoiusly,因为Player是一个复杂的Object,我想为它创建一个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在'&lt;,&gt;'方面遇到问题字符。
我还有另一个问题:通过不声明资源但通过直接绑定(即在C#中编写“ListBox_Players.ItemsSource = PlayerList;”)并删除'ItemTemplate'声明并覆盖Player的ToString()方法class输出我已经设法看到绑定工作的Player的名称(即,我得到ListBox中的Player名称列表)。但是,如果我再次插入模板,它只显示','我的模板不起作用!
答案 0 :(得分:1)
你得到的只是逗号而没有任何其他内容这一事实告诉我Player
成员的名字与Path=
DataTemplate
中的名字不符(我有这个问题在某一时刻),或相关的Player
成员是不可访问的。
到目前为止,我刚刚测试了您的代码显示内容,它似乎运行正常。我做的唯一改变是改变这一行:
ItemsSource="{Binding Source={StaticResource PlayerListResource}}"
到这一行:
ItemsSource = "{Binding}"
这告诉程序它将在运行时获取ItemsSource。
我的Player
课程是:
class Player {
public string name { get; set; }
public int nrOfTabls { get; set; }
}
我的MainWindow.xaml.cs
是:
public partial class MainWindow : Window {
private ObservableCollection<Player> players_;
public MainWindow() {
InitializeComponent();
players_ =new ObservableCollection<Player> () {
new Player() {
name = "Alex",
nrOfTabls = 1,
},
new Player() {
name = "Brett",
nrOfTabls = 2,
},
new Player() {
name="Cindy",
nrOfTabls = 231,
}
};
ListBox_Players.ItemsSource = players_;
}
}