数据绑定/填充Windows Phone中列表框中的项目

时间:2012-08-22 04:33:22

标签: data-binding listbox windows-phone

我有两个独立的课程:

    public class Floor { 
     private string fname;
   public Floor(string name)
   {
     fname = name;
   }

   public int FName
   {
      set { fname = value; }
      get { return fname; }
   }

}

public class Building 
{
   List<Floor> floors;
   string _bName;

   public Building(string bname)
   {

       _bName = bname;

      floors = new List<Floors>();

      for(int i = 0; i < 3; i++)
      {
           floors.Add(new Floor("floor" + (i + 1)));
      }
   }

   public string BName
   {
      set{ _bName = value; }
      get{ return _bName; }
   }

   public List<Floor> Floors
   {
      set { floors = value; }
      get { return floors; }
   }

}

在我的XAML(MainPage.xaml)中:

<ListBox x:Name="lstBuilding" Background="White" Foreground="Black">
  <ListBox.ItemTemplate>
    <DataTemplate>
       <StackPanel Orientation="Horizontal" Margin="10,0,0,15">                  
           <StackPanel>
             <TextBlock Text="{Binding Path=BName }" />                                                                                      
            </StackPanel>
        </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

和我的XAML.cs(MainPage.xaml.cs)

ObservableCollection< Building > buildings = new ObservableCollection< Building>();

for(int i = 0; i < 2; i++)
{
    buildings.Add(new Building("building" + (i + 1)));
}

lstBuilding.ItemsSource = buildings

以下是问题:

如何使用XAML访问Floor类中的FName? 我做的是:

<TextBlock Text="{Binding Path=Floors.FName }" />  

但它不起作用。 :(

很抱歉这篇长篇文章。

1 个答案:

答案 0 :(得分:2)

您的代码本身存在缺陷,因为您正在尝试访问Floors,这又是一个Collection / List,当您有<TextBlock Text="{Binding Path=Floors.FName }" />时,您不清楚您所指的是哪个楼层或者您想要做什么?

如果您只想参考第一层,可以尝试<TextBlock Text="{Binding Path=Floors[0].FName }" />

但是,如果您尝试访问每个建筑物中每个楼层的数据,您需要更改xaml以使其正常工作。它叫做嵌套绑定。

 <ListBox x:Name="listBuilding">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ListBox ItemsSource="{Binding Floors}">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=FName}"></TextBlock>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>