积极答复者
Metro 中一个有关ListBox的小问题。。。。

问题
-
<ListBox x:Name="Scenarios" Margin="0,0,20,0" AutomationProperties.Name="Scenarios" HorizontalAlignment="Left" VerticalAlignment="Top" ScrollViewer.HorizontalScrollBarVisibility="Auto" MaxHeight="125"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
这里<TextBlock Text="{Binding Name}"/>中的Name是什么意思?
即使我将整个<TextBlock Text="{Binding Name}"/>去掉,仍然可以正常显示我添加的ListBoxItem内容,为什么呢?
答案
-
这是数据绑定的语法。
当你为你的ListBox指定一个IEnumeralbe类型的数据源的时候, 你的每一个Item会绑定上一个对象。
例如:你的数据源集合List<Person>,(假设Person是一个自定义类,而且它有一个属性Name), 那么你的Item会采用一个Person对象作为数据源。这时候{Binding Name}的意思就是绑定到Person对象的Name属性上。
同时建议先学习下绑定语法,因为绑定在Xaml中是很常用的。
Thanks! Damon.Tian
- 已标记为答案 Min ZhuModerator 2012年10月9日 7:34
-
你好象都弄混淆了。
你的xaml代码是用的binding语法,而你的code-behind代码中是直接实例化一个一个的listboxitem然后添加到listbox里面去的。当你采用这种方式的时候,你的xaml中的绑定语法是不work的。
如果你的xaml是上上面的那段, 那么你的code-behind代码改为这样, 比如你先定义一个类 Person,这个类可以只包含一个属性(注意不要写成字段了)Name,
然后创建一个Person的集合,直接把这个集合复制给你的ListBox的ItemsSource属性,这样你的Xaml中的banding语法才能正常工作。
Thanks! Damon.Tian
- 已建议为答案 Aaron XueModerator 2012年9月20日 6:57
- 已标记为答案 Min ZhuModerator 2012年10月9日 7:34
全部回复
-
这是数据绑定的语法。
当你为你的ListBox指定一个IEnumeralbe类型的数据源的时候, 你的每一个Item会绑定上一个对象。
例如:你的数据源集合List<Person>,(假设Person是一个自定义类,而且它有一个属性Name), 那么你的Item会采用一个Person对象作为数据源。这时候{Binding Name}的意思就是绑定到Person对象的Name属性上。
同时建议先学习下绑定语法,因为绑定在Xaml中是很常用的。
Thanks! Damon.Tian
- 已标记为答案 Min ZhuModerator 2012年10月9日 7:34
-
我是按照SDK里面的例子做的。
如下:
// Populate the ListBox with the list of scenarios as defined in Constants.cpp. for (unsigned int i = 0; i < scenarios->Length; ++i) { Scenario s = scenarios[i]; ListBoxItem^ item = ref new ListBoxItem(); item->Name = s.ClassName; item->Content = (i + 1).ToString() + ") " + s.Title; ScenarioList->Append(item); }
但是
为什么1:即使我将Text="{Binding Name}"删除了也可以正常显示?
为什么2:TextBlock绑定的是Name,但是实际上显示的却是Scenario的Content属性而非Name?
-
你好象都弄混淆了。
你的xaml代码是用的binding语法,而你的code-behind代码中是直接实例化一个一个的listboxitem然后添加到listbox里面去的。当你采用这种方式的时候,你的xaml中的绑定语法是不work的。
如果你的xaml是上上面的那段, 那么你的code-behind代码改为这样, 比如你先定义一个类 Person,这个类可以只包含一个属性(注意不要写成字段了)Name,
然后创建一个Person的集合,直接把这个集合复制给你的ListBox的ItemsSource属性,这样你的Xaml中的banding语法才能正常工作。
Thanks! Damon.Tian
- 已建议为答案 Aaron XueModerator 2012年9月20日 6:57
- 已标记为答案 Min ZhuModerator 2012年10月9日 7:34