WP7 - динамическое создание PivotItem со списком - PullRequest
3 голосов
/ 17 сентября 2011

У меня есть этот код в MainPage.xaml:

<controls:PivotItem Header="first">
    <ListBox x:Name="MyListBox" Margin="0,0,-12,0" ItemsSource="{Binding ListBoxItem}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="132">
                    <TextBlock Text="{Binding text}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</controls:PivotItem>

И мне нужно создать N PivotItem во время выполнения с такой моделью.Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 19 сентября 2011

Я действительно сделал что-то подобное сегодня. Вы можете применить модель DataTemplate как к PivotItem, так и к ListBox, отображаемому в PivotItem. Попробуйте это:

<controls:Pivot Name="PivotControl" ItemsSource="{Binding PivotItemBinding}">
    <controls:Pivot.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="Put your header bindings here"/>
        </DataTemplate>
     </controls:Pivot.HeaderTemplate>
     <controls:Pivot.ItemTemplate>
        <DataTemplate>
            <ListBox ItemsSource="{Binding ListBoxItem}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="132">
                          <TextBlock Text="{Binding text}" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
           </ListBox>
       </DataTemplate>
   </controls:Pivot.ItemTemplate>
</controls:Pivot>

В этом коде PivotItem будет создаваться для каждого элемента, который вы привязываете к нему, и соответствующий ему ListBox будет заполняться данными из коллекции в том же ItemSource.

3 голосов
/ 17 сентября 2011

Пусть ваше замедление PivotItem будет статическим ресурсом.

<UserControl.Resources>

<DataTemplate x:Key="MyPivotItemTemplate">
   <controls:PivotItem Header="first" >
                <ListBox x:Name="MyListBox" Margin="0,0,-12,0" ItemsSource="{Binding ListBoxItem}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Height="132">
                                <TextBlock Text="{Binding text}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PivotItem>
</DataTemplate>

</UserControl.Resources>

Затем в объявлении Pivot используйте его в качестве шаблона для своих элементов.

<Pivot .... ItemsTemplate="{StaticResource MyPivotItemTemplate}" Items="{Binding MyCollectionInDataContext}"

Таким образом, каждый раз, когда вы добавляете что-то в MyCollectionInDataContext, PivotItemсоздан в соответствии с вашим определенным шаблоном.

2 голосов
/ 17 сентября 2011

Есть более простой способ, чем определить UserControl и выяснить привязку для этого ...

Большая часть сложности здесь заключается в ItemTemplate - переместите ItemTemplate в ResourceDictionary дляту страницу и примените ее ко всем спискам рассылки.Вы даже можете переместить шаблон в App.xaml, если используете его на многих страницах / элементах управления.

<phone:PhoneApplicationPage.Resources>
...
    <DataTemplate x:Key="MyItemDataTemplate">
        <StackPanel Orientation="Horizontal" Height="132">
            <TextBlock Text="{Binding text}" />
        </StackPanel>
    </DataTemplate>
...
</phone:PhoneApplicationPage.Resources>

Во время разработки вы просто вызывали бы это в каждом элементе сводки:

<controls:PivotItem Header="first">
    <ListBox x:Name="MyListBox" 
      Margin="0,0,-12,0" 
      ItemsSource="{Binding ListBoxItems}"
      ItemTemplate="{StaticResource MyItemDataTemplate}"/>
</controls:PivotItem>
<controls:PivotItem Header="second">
    <ListBox x:Name="MyListBox2" 
      Margin="0,0,-12,0" 
      ItemsSource="{Binding OtherListBoxItems}"
      ItemTemplate="{StaticResource MyItemDataTemplate}"/>
</controls:PivotItem>

Если вам нужно сделать это во время выполнения из кода, вы можете извлечь объект "MyItemDataTemplate" ItemTemplate из ResourceDictionary страницы и применить его к новому списку, который вы создаете.

0 голосов
/ 11 сентября 2014

сначала я создал пользовательский элемент управления

UserControl

 <UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    d:DesignHeight="600" d:DesignWidth="480" Background="Transparent">

 <Grid x:Name="LayoutRoot" Background="Transparent">

        <ListBox x:Name="listUser" Margin="20,0,0,0" ScrollViewer.VerticalScrollBarVisibility="Visible"/>

</Grid>

         </UserControl>

после в xaml

.cs

                pivotItem = new PivotItem();
                pivotItem.Header = "Pivot";

                UserControl user = new UserControl();
                user.DataContext = list;
                user.listUser.ItemsSource = list;

                pivotItem.Content = null;
                pivotItem.Content = user;
                pivotfather.Items.Add(pivotItem);
...