0

私は2つの別々のクラスを持っています:

    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 }" />  

しかし、それは機能しませんでした。:(

長い投稿でごめんなさい。

4

1 に答える 1

2

再びコレクション/リストであるフロアにアクセスしようとしているため、コード自体に欠陥があります。アクセスしている場合<TextBlock Text="{Binding Path=Floors.FName }" /> 、どのフロアを参照しているのか、何をしようとしているのかが明確ではありませんか?

1階のみを参照したい場合は、試すことができます <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>
于 2012-09-05T07:23:24.703 に答える