2014-02-20 2 views
0

Привет У меня есть свод с динамическими PivotItems, и мне нужно поставить LongListSelector с помощью StackPanels с TextBlock в PivotItem. У меня проблема со связыванием текста в TextBlock. Binding PivotHeader отлично работает, но я не знаю, как связать Name с TextBlock.Как связать данные с Dynamic LongListSelector

XAML

<phone:Pivot x:Name="ShelfsPivot"> 
      <phone:Pivot.HeaderTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"/> 
       </DataTemplate> 
      </phone:Pivot.HeaderTemplate> 
      <phone:Pivot.ItemTemplate> 
       <DataTemplate> 
        <phone:LongListSelector ItemsSource="{Binding LongListSelector}"> 
         <phone:LongListSelector.ItemTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <CheckBox /> 
            <TextBlock Text="{Binding Name}" /> 
           </StackPanel> 
          </DataTemplate> 
         </phone:LongListSelector.ItemTemplate> 
        </phone:LongListSelector> 
       </DataTemplate> 
      </phone:Pivot.ItemTemplate> 
     </phone:Pivot> 

и код за

public class LongListData 
{ 
    public string Name { get; set; } 
} 

public class PivotData 
{ 
    public string Header { get; set; } 

    public LongListSelector LongListSelector { get; set; } 
} 

public partial class MainPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     var pivotDataList = new List<PivotData>(); 
     var pivotItem1 = new PivotData {Header = "Header1", LongListSelector = new LongListSelector()}; 
     var pivotItem2 = new PivotData {Header = "Header2", LongListSelector = new LongListSelector()}; 

     pivotDataList.Add(pivotItem1); 
     pivotDataList.Add(pivotItem2); 
     ShelfsPivot.ItemsSource = pivotDataList; 

     var list = new List<LongListData>(); 
     var item0 = new LongListData {Name = "Item1"}; 
     var item1 = new LongListData {Name = "Item2"}; 
     var item2 = new LongListData {Name = "Item3"}; 
     list.Add(item0); 
     list.Add(item1); 
     list.Add(item2); 

     foreach (var pivotItem in ShelfsPivot.Items) 
     { 
      var longlist = pivotItem as PivotData; 
      if (longlist != null) 
       longlist.LongListSelector.ItemsSource = list; 
     } 
    } 
} 
+0

Проверьте окно вывода в Visual Studio и посмотрите, есть ли очевидные ошибки привязки? –

+0

Вы создаете элементы управления LongListSelector в коде и привязываете их к свойству ItemsSource еще одного элемента управления LongListSelector. Это совершенно нечувствительно. – lsuarez

ответ

1

Элемент связывания для LongListSelector не должен быть сам по себе LongListSelector, он должен быть либо список или ObservableCollection. Если это статические данные, используйте Список. Если это динамические данные, используйте ObservableCollection.

Таким образом, он должен выглядеть примерно так.

public class LongListData 
{ 
    public string Name { get; set; } 
} 

public class PivotData 
{ 
    public string Header { get; set; } 

    public ObservableCollection<LongListData> ListData { get; set; } 
} 

public MainPage() 
{ 
    InitializeComponent(); 

    var list = new ObservableCollection<LongListData>(); 
    var item0 = new LongListData {Name = "Item1"}; 
    var item1 = new LongListData {Name = "Item2"}; 
    var item2 = new LongListData {Name = "Item3"}; 
    list.Add(item0); 
    list.Add(item1); 
    list.Add(item2); 

    var pivotDataList = new List<PivotData>(); 
    var pivotItem1 = new PivotData {Header = "Header1", ListData = list}; 
    var pivotItem2 = new PivotData {Header = "Header2", ListData = list}; 

    pivotDataList.Add(pivotItem1); 
    pivotDataList.Add(pivotItem2); 
    ShelfsPivot.ItemsSource = pivotDataList; 
} 

С вашей привязкой выглядит так.

<phone:Pivot.ItemTemplate> 
    <DataTemplate> 
     <phone:LongListSelector ItemsSource="{Binding ListData}"> 
      <phone:LongListSelector.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <CheckBox /> 
         <TextBlock Text="{Binding Name}" /> 
        </StackPanel> 
       </DataTemplate> 
      </phone:LongListSelector.ItemTemplate> 
     </phone:LongListSelector> 
    </DataTemplate> 
</phone:Pivot.ItemTemplate> 

Надеюсь, что это поможет и счастливое кодирование!

+0

Спасибо за ответ. Он работает нормально. – user3333415

Смежные вопросы