C# Silverlight绑定存在问题
我有以下XAML:C# Silverlight绑定存在问题,c#,.net,silverlight,binding,listbox,C#,.net,Silverlight,Binding,Listbox,我有以下XAML: ... <ListBox Name ="RoomsListBox" Height="100" HorizontalAlignment="Left" Margin="12,41,0,0" VerticalAlignment="Top" Width="120"></ListBox> ... 问题是我的列表框中有项目,但它们是空的。为什么我看不到“First1”和“First2”?您必须将列表框上的DisplayMemberPath属性设置
...
<ListBox Name ="RoomsListBox" Height="100"
HorizontalAlignment="Left" Margin="12,41,0,0"
VerticalAlignment="Top" Width="120"></ListBox>
...
问题是我的列表框中有项目,但它们是空的。为什么我看不到“First1”和“First2”?您必须将列表框上的
DisplayMemberPath
属性设置为Name
<>向前移动,您可能需要考虑创建一个<代码>数据板< /代码>,以便您的项目有更多的控制:
<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>
有关更多信息,请参阅本教程:只是一个想法
您是否尝试过在XAML中设置DisplayMemberPath属性?调用顺序可能有问题。我更希望您在xaml中定义绑定,例如在代码中定义listbox项的属性 示例:(xaml)
示例:(C#在代码隐藏中)
/。。。
私人可观测收集项目;
公共可观测集合MyItems
{
得到
{
返回_myItems??(_myItems=newobservedcollection{“FirstItem”,“SecondItem”});
}
设置
{
_myItems=价值;
}
}
正如ChrisF所说,您可以使用INotifiyPropertyChanged接口,在那里您将在属性的setter中引发PropertyChanged事件
请参阅-->这里的问题与绑定、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
(其中一个必须为空)。另外,确保表示项目的类必须是公共的
希望这有帮助:)很抱歉,错过了,我们正在xaml中查找它。添加了一个可以按原样使用的DataTemplate示例,我认为这是一个更好的解决方案!我改变了我的XAML。但我仍然有一个带有空项目的列表。我不明白这怎么可能。默认的ToString()方法从不返回空字符串。更多信息。我在列表中也没有任何文本块。奇怪。。。只要试着移除一些东西,直到你发现哪里出了问题。那么,如果你把那些用XAML硬编码的项目放进去,没有datatemplate或displaymemberpath等等,会发生什么呢?我已经删除了我的答案,因为经过反思(通过评论),我认为这与本例无关。当然,除非OP按照这些思路重写他的代码。这真的很有帮助。非常感谢。我已经使用了一个单独的类,但问题仍然存在。这是因为匿名类和我新创建的类是私有的,而不是公共的。我只是想知道为什么没有关于它的警告或异常?这里的问题是数据绑定机制没有访问类的权限,所以它对它一无所知(也不知道如何绑定到它)!缺少警告、异常和最重要的“调试”通常是数据绑定的一个问题!Silverlight 5将会改变这一点,它将引入“数据绑定调试”,这非常酷:)感谢您的解释和关于Silverlight 5的好消息:)实际上Silverlight 5带来了很多好东西,您可以找到更多关于观看的信息
<ListBox Name ="RoomsListBox"
ItemsSource="{Binding MyItems}"
Height="100"
HorizontalAlignment="Left"
Margin="12,41,0,0"
VerticalAlignment="Top"
Width="120" />
//...
private ObservableCollection<string> _myItems;
public ObservableCollection<String> MyItems
{
get
{
return _myItems ?? (_myItems = new ObservableCollection<string> { "FirstItem", "SecondItem"});
}
set
{
_myItems = value;
}
}
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";
}