如何使用DataTemplate访问列表框中的特定项目

时间:2015-07-12 16:28:47

标签: c# windows-phone-8.1

我正在使用Telerik,HubSection就像Pivot一样使用WP8。

<HubSection x:Uid="Section4Header" Header="All note" >
    <DataTemplate>
        <ListBox x:Name="listBoxobj" Background="Transparent" Margin="6" Height="auto" BorderThickness="2" MaxHeight="580" Grid.Row="1"  SelectionChanged="listBoxobj_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Width="350" >
                        <Border Margin="5" BorderBrush="White" BorderThickness="1">
                            <Grid Holding="Grid_Holding" VerticalAlignment="Stretch">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>

                                <FlyoutBase.AttachedFlyout>
                                    <MenuFlyout>
                                        <MenuFlyoutItem x:Name="EditButton"
                                            Text="Export To PDF"
                                            Click="EditButton_Click"
                                        />
                                        <MenuFlyoutItem x:Name="EditButton1"
                                            Text="Export To PDF syncfu"
                                            Click="EditButton1_Click"
                                        />
                                    </MenuFlyout>
                                </FlyoutBase.AttachedFlyout>
                                <TextBlock Margin="5,0,0,0" Grid.Row="0" x:Name="NameTxt" TextWrapping="Wrap" Text="{Binding Name}" FontSize="28" Foreground="White"/>
                                <TextBlock HorizontalAlignment="Right" Margin="0,0,35,0" Grid.Row="3" x:Name="CreateddateTxt" Foreground="White" FontSize="18" TextWrapping="Wrap" Text="{Binding CreationDate}" />
                            </Grid>
                        </Border>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </DataTemplate>
</HubSection>

C#

private void ReadWritePadFileContentList_Loaded(object sender, RoutedEventArgs e)
{
    ReadAllWritePadFileContent dbnote = new ReadAllWritePadFileContent();
    DB_ContactList = dbnote.GetAllContacts();//Get all DB contacts 
    if (DB_ContactList.Count > 0)
        deleteAppBarButton.IsEnabled = true;
    else
        deleteAppBarButton.IsEnabled = false;

    listBoxobj.ItemsSource = DB_ContactList.OrderByDescending(i => i.Id).ToList();//Binding DB data to LISTBOX and Latest contact ID can Display first. 

}

listBoxobj是ListBox的名称 问题是如何才能访问列表框?

  

名称&#39; listBoxobj&#39;在当前上下文中不存在

2 个答案:

答案 0 :(得分:1)

正如迈克所说,你无法直接访问集线器代码中的列表框,就像在DataTemplate中一样。

然而,您可以创建一个UserControl,例如MyUserControl1。 将ListBox放在MyUserControl1.xaml文件中,并将其相关的c#代码放在MyUserControl1.cs文件中。 然后,在HubSection中添加用户控件。

<HubSection x:Uid="Section4Header" Header="All note" >
    <DataTemplate>
        <local:MyUserControl1 x:Name="ListControl"/>
    </DataTemplate>
</HubSection>

编辑:将ListBox代码放在<Grid> UserControl代码中:

<ListBox x:Name="listBoxobj" Background="Transparent" Margin="6" Height="auto" BorderThickness="2" MaxHeight="580" Grid.Row="1"  SelectionChanged="listBoxobj_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Width="350" >
                    <Border Margin="5" BorderBrush="White" BorderThickness="1">
                        <Grid Holding="Grid_Holding" VerticalAlignment="Stretch">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>

                            <FlyoutBase.AttachedFlyout>
                                <MenuFlyout>
                                    <MenuFlyoutItem x:Name="EditButton"
                                        Text="Export To PDF"
                                        Click="EditButton_Click"
                                    />
                                    <MenuFlyoutItem x:Name="EditButton1"
                                        Text="Export To PDF syncfu"
                                        Click="EditButton1_Click"
                                    />
                                </MenuFlyout>
                            </FlyoutBase.AttachedFlyout>
                            <TextBlock Margin="5,0,0,0" Grid.Row="0" x:Name="NameTxt" TextWrapping="Wrap" Text="{Binding Name}" FontSize="28" Foreground="White"/>
                            <TextBlock HorizontalAlignment="Right" Margin="0,0,35,0" Grid.Row="3" x:Name="CreateddateTxt" Foreground="White" FontSize="18" TextWrapping="Wrap" Text="{Binding CreationDate}" />
                        </Grid>
                    </Border>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

答案 1 :(得分:0)

您将无法直接执行此操作,因为它位于DataTemplate中,因此您的ListBox会在运行时生成。

按照本文中的步骤将ListBox从可视树中拉出来,您可能会有一些快乐: http://blogs.msdn.com/b/wpfsdk/archive/2007/04/16/how-do-i-programmatically-interact-with-template-generated-elements-part-ii.aspx