C# Silverlight绑定存在问题

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属性设置

我有以下XAML:

 ...
 <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";
}