WPF将子项添加到ListViewItem

时间:2018-03-20 16:06:35

标签: c# wpf

我正在使用WPF并拥有像这样的ListViewItem:

<ListViewItem>
    <StackPanel Orientation="Horizontal">
        <Image Source="docx.png" Height="30"></Image>
        <TextBlock Text="image"></TextBlock>
    </StackPanel>
</ListViewItem>

这个XAML代码的作用是将带有图像的堆栈面板添加到ListViewItem中。我想知道如何以编程方式实现这一目标。例如,我启动了一个ListViewItem实例并可以访问其内容。但是这个类没有像subitems这样的字段。

2 个答案:

答案 0 :(得分:0)

您应该使用ItemsSourceBinding轻松访问您在列表中提供的数据。 但是,如果您ListView调用MyListView,则可以在第一项中访问控件:

var item = MyListView.Items[0] as ListViewItem;
var firstItemChild = item?.Content as StackPanel;
var image = firstItemChild?.Children[0];

答案 1 :(得分:0)

不要在Xaml中定义项目,ListView允许您定义绑定项目的结构和模板。使用ItemsSource属性或附加代码隐藏MyView.ItemsSource=MyList中的项目列表 请记住,该对象必须具有公共Docname属性(要绑定的所有属性都需要公开) 向MyItems添加项目会将其添加到listView(MyItems需要是ObservableCollection或者您需要手动执行MyView.Items.Refresh()

<ListView x:Name="MyView" ItemsSource ="{Binding MyItems}"  
  HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>//define items container, uniformGrid, stackpanel...
        <UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
    <DataTemplate> //define your item template
         <StackPanel Orientation="Horizontal">
           <Image Source="{Binding Docname}" Height="30"></Image>
           <TextBlock Text="image"></TextBlock>
         </StackPanel>
    </DataTemplate>
</ListView.ItemTemplate>

如果您想为每个项目使用不同的模板,则可以使用 [http://dotnetpattern.com/wpf-listview-itemtemplateselector 或完全在xaml中:

<ListView x:Name="MyView" ItemsSource ="{Binding MyItems}"  
  HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>//define items container, uniformGrid, stackpanel...
        <UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
    <ListView.ItemTemplate>
    <DataTemplate> 
     <ContentControl Content="{Binding Value}"> 
     <ContentControl.Resources>
         <DataTemplate DataType="{x:Type Mytype}">
          <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Docname}" Height="30"></Image>
            <TextBlock Text="image"></TextBlock>
          </StackPanel>
         </DataTemplate>
        <DataTemplate DataType="{x:Type My2type}">
          <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Docname}" Height="30"></Image>
            <TextBlock Text="2  type image"></TextBlock>
          </StackPanel>
         </DataTemplate>
      </ContentControl.Resources>
     </ContentControl>
    </DataTemplate>
   </ListView.ItemTemplate>
</ListView>