我有以下XAML:
...
<ListBox Name ="RoomsListBox" Height="100"
HorizontalAlignment="Left" Margin="12,41,0,0"
VerticalAlignment="Top" Width="120"></ListBox>
...
以下C#代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
RoomsListBox.ItemsSource = new[] { new { Name = "First1" },
new { Name = "First2" } };
RoomsListBox.DisplayMemberPath = "Name";
}
问题是我的ListBox有项目但是它们是空的。为什么我没有看到“First1”和“First2”?
答案 0 :(得分:1)
这里的问题不是绑定,也不是ItemTemplate,也不是更改通知。这是您正在使用的匿名类型导致它。尝试使用您的项目的类或结构
public class Item
{
public string Name { get; set; }
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
RoomsListBox.ItemsSource = new[] {
new Item { Name = "First1" },
new Item { Name = "First2" }};
RoomsListBox.DisplayMemberPath = "Name";
}
您的xaml保持不变,或者您可以根据需要为ListBox项定义DataTemplate。请注意,您不能同时设置ItemTemplate
和DisplayMemberPath
(一个必须为null)。此外,请确保代表您的项目的类必须是公开的。
希望这会有所帮助:)
答案 1 :(得分:0)
您必须将ListBox上的DisplayMemberPath
属性设置为Name
。
展望未来,您可能需要考虑为您的商品创建DataTemplate
以获得更多控制权:
<ListBox x:Name ="RoomsListBox" Height="100"
HorizontalAlignment="Left" Margin="12,41,0,0"
VerticalAlignment="Top" Width="120">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
有关详细信息,请参阅本教程:http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx
答案 2 :(得分:0)
只是一个想法..
您是否尝试过在XAML中设置DisplayMemberPath属性?调用顺序可能存在问题。
答案 3 :(得分:0)
我希望您在xaml中定义绑定,例如在Code-Behind中为列表框的项目定义属性。
示例:(xaml)
<ListBox Name ="RoomsListBox"
ItemsSource="{Binding MyItems}"
Height="100"
HorizontalAlignment="Left"
Margin="12,41,0,0"
VerticalAlignment="Top"
Width="120" />
示例:(代码隐藏中的C#)
//...
private ObservableCollection<string> _myItems;
public ObservableCollection<String> MyItems
{
get
{
return _myItems ?? (_myItems = new ObservableCollection<string> { "FirstItem", "SecondItem"});
}
set
{
_myItems = value;
}
}
就像ChrisF所说,你可以使用INotifiyPropertyChanged接口,你可以在你的属性的setter中引发PropertyChanged事件。
参见 - &gt; http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx