【问题标题】:Dynamically populate ListView with text and Images WPF/C#使用文本和图像 WPF/C# 动态填充 ListView
【发布时间】:2012-10-07 14:15:23
【问题描述】:

我对 .NET 4.0 中的列表视图控件感到非常沮丧。我想将文本添加到一行的第一列,然后将图像添加到第二列,然后将文本添加到第三列(全部在顶行),然后对下一行执行相同操作。但是,我的代码只是将文本添加到顶行的所有三列,然后将图像添加到下一行,然后将文本添加到下一行。我不知道如何指定行/列索引(例如 [1,2] 用于第二行第三列)。

我知道这似乎是一个非常基本的查询,那里有很多信息,但我是 .NET 的新手,我读的越多,我就越困惑:-(

我的 c# 代码是:

  ListViewItem lstItem1 = new ListViewItem();
      lstItem.Content = "Picture 1";
      lstView.Items.Add(lstItem);
      Image lstImage = new Image();
      ListViewItem lstItem2 = new ListViewItem();
      lstItem2.Source = SrcBmp;
      lstItemImage.Content = lstImage;
      lstView.Items.Add(lstItem2);
  ListViewItem lstItem3 = new ListViewItem();
      lstItem3.Content = "Blah blah";
      lstView.Items.Add(lstItem3);

这里是 XAML:

<ListView Height="412" HorizontalAlignment="Left" Margin="312,49,0,0" Name="lstView"     VerticalAlignment="Top" Width="636" ItemsSource="{Binding}" FontSize="12"> 
                              <ListView.View>
                    <GridView>
                            <GridViewColumn Header="Photo No." Width="50"/>
                            <GridViewColumn Header="Photo" Width="150"/>
                        <GridViewColumn Header="Description" Width="300"/>
                    </GridView>
                    </ListView.View>
               </ListView>

提前非常感谢。

维格姆酋长

【问题讨论】:

  • 我认为您在这里将行与列混淆了。您的 XAML 看起来不错,但您的代码似乎在项目是列的假设下运行。它们是行。您需要创建一个具有 photoNo、Photo 和 description 属性的业务对象,然后将您的列表视图绑定到该对象的集合。 ListViewItems 的表现力不足以满足您的需求。
  • 谢谢菲尔,我现在明白了。我没有将列与行混淆,但我误解了 listview ctrl 的作用。我假设它类似于 2D 数组,并且我可以为每个元素添加一个项目。我将创建一个结构并绑定它,再次感谢。

标签: c# wpf image listview


【解决方案1】:

您必须为您的 Content 属性创建一个StackPanel 并将图像和文本添加到该 StackPanel。 例如

<Window.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <StackPanel Orientation="Horizontal">
            <Image Width="10" Height="10" Stretch="Fill" Source="{Binding Cover}"/>
        <Label Content="{Binding Title}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>


<Grid x:Name="grid">
    <ListView ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Albums}" />
</Grid>

【讨论】:

  • 感谢 Ravindra,这是个好主意,我误解了 listview 的作用。我把它当作一个数组来对待。
【解决方案2】:

您添加了 3 行并获得了 3 行。应该不足为奇。

ListViewItem 只有一个内容。

您需要具有这两个属性的类或支柱。
然后将这些对象添加到 List 等集合中,并将 ListView 绑定到该集合。
然后在 GridViewColumn 中,绑定路径是属性的名称。

public class Album 
{
    public string Title { get; set; }
    public Image Img  { get; set; }
} 

【讨论】:

  • 谢谢 Blam 我误解了列表视图的作用。我把它有点像一个数组/表,它不是!我想我会创建一个结构。
  • 如果这是答案,请给我支票。
  • 我必须使用 ImageSource 类型而不是 Image 类型来绑定单元格模板。
猜你喜欢
  • 2016-03-18
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多