繁体   English   中英

列表框绑定问题中的C#Windows应用程序列表框(通用应用程序电话+ PC)

[英]c# windows app listbox inside listbox binding issue(universal app phone+pc)

我正在创建一个通用应用,该应用需要在列表框中包含列表框。 第一个列表框显示包含消息的列表。 有些邮件附有照片,我必须将其添加为另一个列表。 我可以用数据填充第一个列表框,但是无法设置第二个列表框。 我通过它的x:Name设置ItemSource的第一个列表框。 我无法以这种方式访问​​第二个。 我确定我对绑定有一些思考上的问题。

这里的xaml:

<ListBox x:Name="MessageHistory"  Background="#143b8a" Margin="0,0,0,101">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Grid Grid.Column="1">
                            <Grid.RowDefinitions>
                            </Grid.RowDefinitions>
                            <TextBlock Text="{Binding Inbox}" Margin="0,0,50,0" HorizontalAlignment="Left" TextWrapping="Wrap" FontSize="24" Foreground="WhiteSmoke" TextAlignment="Left"/>
                            <TextBlock Text="{Binding Outbox}" Margin="80,0,0,0" HorizontalAlignment="Right" TextWrapping="Wrap" FontSize="24" Foreground="Gray" TextAlignment="Right"/>
                            <!-- start of list for message photo thumbs -->
                                <ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                                         x:Name="FirstThumbs" />                                   
                                    <ListBox.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <StackPanel Orientation="Horizontal" />
                                        </ItemsPanelTemplate>
                                    </ListBox.ItemsPanel>
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition />
                                                    <ColumnDefinition />
                                                </Grid.ColumnDefinitions>
                                                <Image Source="{Binding         Thumb,Mode=OneWay}" Height="90" Width="90" Stretch="UniformToFill"/>
                                                <Grid Grid.Column="1">
                                                    <Grid.RowDefinitions>
                                                    </Grid.RowDefinitions>
                                                </Grid>
                                            </Grid>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>
                                <!-- end of list for message photo thumbs   -->
                            </Grid>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

然后我有两节课。 第一个是MesHistory.cs:

public class MesHistory
{
    public string Inbox { get; set; }
    public string Outbox { get; set; }
}

第二个ThumbView.cs:

public class ThumbView
{
    public string Thumb { get; set; }
}

我填充的第一个/主要列表是:

List<MesHistory> messageslist = new List<MesHistory>();
...foreach...{
MesHistory newMessage = new MesHistory();
newMessage.Inbox = finalmessagetext.InnerText;
messageslist.Add(newMessage);
}

然后像这样设置ItemsSource:

 MessageHistory.ItemsSource = messageslist;

当我尝试对内部ListBox进行相同操作时,无法通过名称设置ItemsSource来访问它:

List<ThumbView> newThumblist = new List<ThumbView>();
...foreach...{
ThumbView newThumb = new ThumbView();
newThumb.Thumb = thumbaddress.Attributes["src"].Value).ToString();
newThumblist.Add(newThumb);
}

然后像这样设置ItemsSource不起作用:

 FirstThumbs.ItemsSource = newThumblist;

VS告诉我在当前上下文中不存在“ FirstThumbs”。

如何访问它并将数据绑定到该列表? 如果可能的话,我也想为整个列表进行选择...

尝试,

有一个具有父列表框集合的视图模型。 在该集合内部有一个辅助集合,用于为子级列表框绑定itemssource。

父列表框中存在的每个项目都是对应于子列表列表的数据上下文。

我已经为这种情况准备了一个样本。 请在http://1drv.ms/1qztFgh中找到示例。

希望这对您有所帮助。

1)您必须修改数据模型:

public class MesHistory
{
  public string Inbox { get; set; }
  public string Outbox { get; set; }

  public List<ThumbView> ThumbList {get; set;}
}

2)创建邮件列表时,必须为每个MesHistory对象填充ThumbList属性:

newMessage.ThumbList = newThumblist

3)像这样在XAML中修改项目模板:

<!-- start of list for message photo thumbs -->
                            <ListBox ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                     ItemSource="{Binding ThumbList}"   
                                     x:Name="FirstThumbs" />                                   
                                <ListBox.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel Orientation="Horizontal" />
                                    </ItemsPanelTemplate>
                                </ListBox.ItemsPanel>
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition />
                                                <ColumnDefinition />
                                            </Grid.ColumnDefinitions>
                                            <Image Source="{Binding Thumb}"
                                                   Height="90" Width="90"   Stretch="UniformToFill"/>
                                            <Grid Grid.Column="1">
                                                <Grid.RowDefinitions>
                                                </Grid.RowDefinitions>
                                            </Grid>
                                        </Grid>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                            <!-- end of list for message photo thumbs   -->     

4)您无法获得整个列表的选择事件。 只需将其添加到主ListBox和ItemTemplate内的Listbox

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM