C# WPF动态添加包含详细信息的ListViewItem

C# WPF动态添加包含详细信息的ListViewItem,c#,wpf,C#,Wpf,我想添加ListViewItem,其中包含更改的详细信息,如图像链接、文本框中的文本等。如何添加 <ListView VerticalAlignment="Bottom" Margin="10" Height="170" Foreground="LightSteelBlue"> <ListViewItem> <StackPanel Orientation="Horizontal">

我想添加ListViewItem,其中包含更改的详细信息,如图像链接、文本框中的文本等。如何添加

    <ListView VerticalAlignment="Bottom" Margin="10" Height="170" Foreground="LightSteelBlue">
        <ListViewItem>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="01" VerticalAlignment="Center"/>
                <Ellipse Margin="20,0" Width="30" Height="30" VerticalAlignment="Center">
                    <Ellipse.Fill>
                        <ImageBrush ImageSource="images/pobrane.jpg"/>
                    </Ellipse.Fill>
                </Ellipse>
                <TextBlock Text="Three Days Grace - I Hate Everything About You (Official Music Video)" Width="115" TextTrimming="CharacterEllipsis" VerticalAlignment="Center" />
                <TextBlock Text="3:45" Margin="10,0" VerticalAlignment="Center" />
            </StackPanel>
        </ListViewItem>
    </ListView>


我想创建一个函数,该函数将添加与我在更改细节时向您展示的相同的代码。

您可以使用WPF Listview的项目模板项目资源属性以及绑定概念

举个例子,从你的问题开始:

可以将以下代码添加到新WPF项目的主窗口文件中: MainWindow.xaml文件应如下所示:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Click="Button_Click" 
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Margin="10"
                Content="Add item"/>
        <ListView VerticalAlignment="Bottom"
                  Margin="10"
                  Height="170"
                  ItemsSource="{Binding Tracks}"
                  Foreground="LightSteelBlue">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Number}"
                                   VerticalAlignment="Center" />
                        <Ellipse Margin="20,0"
                                 Width="30"
                                 Height="30"
                                 VerticalAlignment="Center">
                            <Ellipse.Fill>
                                <ImageBrush ImageSource="{Binding Image}" />
                            </Ellipse.Fill>
                        </Ellipse>
                        <TextBlock Text="{Binding Name}"
                                   Width="115"
                                   TextTrimming="CharacterEllipsis"
                                   VerticalAlignment="Center" />
                        <TextBlock Text="{Binding Length}"
                                   Margin="10,0"
                                   VerticalAlignment="Center" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<Track> Tracks { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;

            Tracks = new ObservableCollection<Track>();
            AddTrack("01","Three Days Grace - I Hate Everything About You (Official Music Video)", "3:45", new BitmapImage(new Uri("pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg")));
        }

        public void AddTrack (string number, string name, string length, ImageSource image)
        {
            var track = new Track();
            track.Number = number;
            track.Name = name;
            track.Length = length;
            track.Image = image;
            Tracks.Add(track);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            AddTrack("01", "Three Days Grace - I Hate Everything About You (Official Music Video)", "3:45", new BitmapImage(new Uri("pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg")));
        }
    }

    public class Track
    {
        public string Number { get; set; }

        public string Name { get; set; }

        public string Length { get; set; }

        public ImageSource Image { get; set; }
    }
}

MainWindow.xaml.cs文件应如下所示:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Click="Button_Click" 
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Margin="10"
                Content="Add item"/>
        <ListView VerticalAlignment="Bottom"
                  Margin="10"
                  Height="170"
                  ItemsSource="{Binding Tracks}"
                  Foreground="LightSteelBlue">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Number}"
                                   VerticalAlignment="Center" />
                        <Ellipse Margin="20,0"
                                 Width="30"
                                 Height="30"
                                 VerticalAlignment="Center">
                            <Ellipse.Fill>
                                <ImageBrush ImageSource="{Binding Image}" />
                            </Ellipse.Fill>
                        </Ellipse>
                        <TextBlock Text="{Binding Name}"
                                   Width="115"
                                   TextTrimming="CharacterEllipsis"
                                   VerticalAlignment="Center" />
                        <TextBlock Text="{Binding Length}"
                                   Margin="10,0"
                                   VerticalAlignment="Center" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<Track> Tracks { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;

            Tracks = new ObservableCollection<Track>();
            AddTrack("01","Three Days Grace - I Hate Everything About You (Official Music Video)", "3:45", new BitmapImage(new Uri("pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg")));
        }

        public void AddTrack (string number, string name, string length, ImageSource image)
        {
            var track = new Track();
            track.Number = number;
            track.Name = name;
            track.Length = length;
            track.Image = image;
            Tracks.Add(track);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            AddTrack("01", "Three Days Grace - I Hate Everything About You (Official Music Video)", "3:45", new BitmapImage(new Uri("pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg")));
        }
    }

    public class Track
    {
        public string Number { get; set; }

        public string Name { get; set; }

        public string Length { get; set; }

        public ImageSource Image { get; set; }
    }
}
使用系统;
使用System.Collections.ObjectModel;
使用System.Windows;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
命名空间WpfApp1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共ObservableCollection磁道{get;set;}
公共主窗口()
{
初始化组件();
this.DataContext=this;
轨迹=新的ObservableCollection();
AddTrack(“01”,“三天宽限期-我讨厌你的一切(官方音乐视频)”,“3:45”,新位图图像(新Uri(“pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg);
}
public void AddTrack(字符串编号、字符串名称、字符串长度、图像源图像)
{
var track=新轨迹();
轨道号=轨道号;
track.Name=Name;
轨道长度=长度;
track.Image=Image;
Tracks.Add(track);
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
AddTrack(“01”,“三天宽限期-我讨厌你的一切(官方音乐视频)”,“3:45”,新位图图像(新Uri(“pack://application:,,,/WpfApp1;component/Resources/pobrane.jpg);
}
}
公共类轨道
{
公共字符串编号{get;set;}
公共字符串名称{get;set;}
公共字符串长度{get;set;}
公共图像源图像{get;set;}
}
}
当然,这只是一个起点。您应该继续搜索和阅读MVVM概念,并将逻辑移到viewmodel