使用C#在WPF ListView中添加图像

4

我是一个新的C#和WPF用户,我在填充中遇到了文本和图像的问题。

这是我的WPF代码:

  <Grid>
    <ListView Name="MyList" Margin="0,0,328.4,-0.2" >
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Rete" DisplayMemberBinding="{Binding Rete}"/>
                <GridViewColumn Header="Immagine" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Image  Source="{Binding Immagine}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
        <Image Height="100" Width="100"/>
    </ListView>
    <Button Content="Button" HorizontalAlignment="Left" Margin="324,83,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
     </Grid>

这是我的 C# 代码:

while (r.Read())
        {

            MyList.Items.Add(new { Rete = r.GetString(0), Immagine = r.GetString(1) });
        }

感谢大家,我已经解决了问题!我在数据库中更改了图像路径,代码是正确的!:)


你的问题出在哪里?是读取数据还是显示数据? - Sheridan
我的问题是显示数据!文本没问题,但是我看不到图片。图片在调试文件夹中,我正确读取了她的名称! - Stefano
你到底为什么要把一张图片放在“Debug”文件夹里?为了清晰明了,它应该放在一个名为“Images”的文件夹中,不是吗?此外,请向我们展示您在“Immagine”属性中使用的“Image.Source”的值。 - Sheridan
@Stefano 顺便说一下,既然你是 C# 和 WPF 的新手,我建议你学习 MVVM,而不是直接向列表中添加项目。 - Omri Btian
是的更清晰,但这不是问题! :) - Stefano
显示剩余3条评论
1个回答

6

这是我的XAML代码。

  <Grid>
    <ListView x:Name="ListView1"   VirtualizingStackPanel.IsVirtualizing="True" Height="200"  ItemsSource="{Binding ListViewItemsCollections}">
        <ListView.View>
            <GridView AllowsColumnReorder="False">
                <GridViewColumn x:Name="GridViewColumnName" Header="Name"  Width="200">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image x:Name="Image_GridViewColumnName" Width="100" Height="50" Source="{Binding GridViewColumnName_ImageSource}" />
                                <Label Content="{Binding GridViewColumnName_LabelContent}" Width="50" Height="100"  />
                                <Label Content="{Binding GridViewColumnName_ID}" Visibility="Hidden" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn x:Name="GridViewColumnTags" Header="Tags" Width="100" DisplayMemberBinding="{Binding GridViewColumnTags}" />
                <GridViewColumn x:Name="GridViewColumnLocation" Header="Location" Width="238" DisplayMemberBinding="{Binding GridViewColumnLocation}" />
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

这是我的C#部分...

 public ObservableCollection<ListViewItemsData> ListViewItemsCollections { get { return _ListViewItemsCollections; } }
    ObservableCollection<ListViewItemsData> _ListViewItemsCollections = new ObservableCollection<ListViewItemsData>();

    public MainWindow()
    {

        InitializeComponent();

        ListViewItemsCollections.Add(new ListViewItemsData()
        {
            GridViewColumnName_ImageSource = @"D:\rd\C Sharp\general\StackOverFlowAnswers\WPF\MSD.JPG",
            GridViewColumnName_LabelContent = "shanmugharaj"
        });

        ListView1.ItemsSource = ListViewItemsCollections;
    }

    public class ListViewItemsData
    {
        public string GridViewColumnName_ImageSource { get; set; }
        public string GridViewColumnName_LabelContent { get; set; }
        public string GridViewColumnName_ID { get; set; }
        public string GridViewColumnTags { get; set; }
        public string GridViewColumnLocation { get; set; }
    }
}

我测试了这些,它们工作得很好。如果我的理解是正确的,这就是你需要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接