【问题标题】:Multiple text items in List view item列表视图项中的多个文本项
【发布时间】:2015-09-15 17:11:56
【问题描述】:

在 C# 中使用 Windows 10 通用应用程序时,有谁知道将多个文本部分添加到一个列表视图项的正确方法? Items.subitems 似乎不起作用。假设我要在单个列表项中显示的两个字符串存储在...

    public class listContent
    {
        public string heading { get; set; }
        public string subHeading { get; set; }
    }

会做类似的工作吗?

listContent listItem = new listContent();
listItem.heading = "HEADING";
listItem.subHeading = "subheading";
lsvTransactions.Items.Add(listItem);

问候 内森

【问题讨论】:

    标签: c# listview windows-10 win-universal-app subitem


    【解决方案1】:

    最好的方法是将DataBind 到一个自定义的DataTemplate。考虑到您已经拥有lsvTransactions 名称 ListView。这是你应该做的。

    1. 在您的 .cs 文件中创建一个 listContent 列表,如下所示

      public class MainPage : Page
      {
          public List<listContent> ContentList {get; set;}
          .....
      
    2. 像上面那样在代码中向 ContentList 添加项目。

    3. 添加项目后,添加以下行以指向数据源。

      lsvTransactions.DataContext = ContentList;
      
    4. 使用 DataTemplate 创建如下所示的 ListView

      <ListView x:Name="lsvTransactions" ItemsSource={Binding}>
              <ListView.ItemTemplate>
                      <DataTemplate>
                              <StackPanel>
                                      <TextBlock Text="{Binding heading}"/>
                                      <TextBlock Text="{Binding subheading}"/>
                              </StackPanel>
                      </DataTemplate>
              </ListView.ItemTemplate>
      </ListView>
      

    【讨论】:

    • &lt;ListView x:Name="lsvTransactions" ItemsSource={Binding}&gt; 此行在“ItemsSource={Binding}”上返回错误。当我将其更改为“ItemsSource="{Binding}”时,错误消失但列表框中没有任何内容
    【解决方案2】:

    正如人们所说,如果您向我们提供有关您的代码的更多信息,我们可以提供更好的帮助。我在这里向您发布了一个列表框示例(类似于列表视图),其中包含我使用的元素的 ItemTemplate 定义以及如何将项目绑定到列表框以及项目中的字段与放入列表框中的元素.

        <ListBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Path=MeasureUnits, Mode=OneWay}"
                  SelectedItem="{Binding Path=SelectedMeasureUnit, Mode=TwoWay}"
                SelectionMode="Single" Margin="0" 
                  IsSynchronizedWithCurrentItem="True" >
            <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <WrapPanel>
                                <TextBlock Text="{Binding Path=ID}" Style="{StaticResource idStyle}" />
                                <TextBlock Text="{Binding Path=Description}" Style="{StaticResource desStyle}"/>
                            </WrapPanel>
                            <WrapPanel>
                                <TextBlock Text="{Binding Path=DestinationUnitsInSource}" Style="{StaticResource numStyle}" />
                                <TextBlock Text="{Binding Path=SourceUnitsInDestination}" Style="{StaticResource numStyle}" />
                            </WrapPanel>
                        </StackPanel>
                    </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    

    【讨论】:

    • Universal 不支持环绕面板,也不支持 IsSynchronizedWithCurrentItem,但我对此表示赞同 :)
    • 您可以在此处简单地删除所有不受支持的代码。我认为他不需要WrapPanelStackPanel 就可以了。
    【解决方案3】:

    在我的 XAML 中:

     <ListView x:Name="listView">
    

    在我的 C# 中:

    listView.Items.Add(item);
    

    Item 是一个包含多个文本元素的对象。

    如果您发布代码,我可以更具体。

    【讨论】:

    • 即使您像这样将它添加到 listView 中,您的 ListView 也不知道如何显示这两个元素 :) 您需要定义一个 DataTemplate 以使其成为可能。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多