C# 将项目添加到特定列的ListView中

C# 将项目添加到特定列的ListView中,c#,wpf,listview,C#,Wpf,Listview,我需要的正是这个: 但只是为了WPF 我知道,我应该使用绑定等,但这只是为了自己的测试 我还不知道如何才能做到这一点。这个怎么样: 是的,我知道这种尝试使用了一个具体的对象Person和binding,但是使用这种方法,只需修改所需的列/属性,而不必考虑ListView本身,就非常简单了。我认为使用绑定的方法比任何其他方法都简单 XAML: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.

我需要的正是这个:

但只是为了WPF

我知道,我应该使用绑定等,但这只是为了自己的测试

我还不知道如何才能做到这一点。

这个怎么样:
是的,我知道这种尝试使用了一个具体的对象Person和binding,但是使用这种方法,只需修改所需的列/属性,而不必考虑ListView本身,就非常简单了。我认为使用绑定的方法比任何其他方法都简单

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <ListView ItemsSource="{Binding}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"></GridViewColumn>
                    <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"></GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</Window>

C#:

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ObservableCollection列表=新的ObservableCollection();
添加(newperson(){FirstName=“FirstName”,LastName=“LastName”});
DataContext=list;
}
}
公共类人员:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私有字符串_firstName;
公共字符串名{
得到
{
返回_firstName;
}
设置
{
_firstName=值;
if(PropertyChanged!=null)
{
PropertyChanged(新PropertyChangedEventArgs(“名字”));
}
}
}
私有字符串_lastName;
公共字符串姓氏
{
得到
{
返回_lastName;
}
设置
{
_lastName=值;
if(PropertyChanged!=null)
{
PropertyChanged(即新PropertyChangedEventArgs(“姓氏”);
}
}
}
}
这个怎么样:
是的,我知道这种尝试使用了一个具体的对象Person和binding,但是使用这种方法,只需修改所需的列/属性,而不必考虑ListView本身,就非常简单了。我认为使用绑定的方法比任何其他方法都简单

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <ListView ItemsSource="{Binding}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"></GridViewColumn>
                    <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"></GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</Window>

C#:

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ObservableCollection列表=新的ObservableCollection();
添加(newperson(){FirstName=“FirstName”,LastName=“LastName”});
DataContext=list;
}
}
公共类人员:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私有字符串_firstName;
公共字符串名{
得到
{
返回_firstName;
}
设置
{
_firstName=值;
if(PropertyChanged!=null)
{
PropertyChanged(新PropertyChangedEventArgs(“名字”));
}
}
}
私有字符串_lastName;
公共字符串姓氏
{
得到
{
返回_lastName;
}
设置
{
_lastName=值;
if(PropertyChanged!=null)
{
PropertyChanged(即新PropertyChangedEventArgs(“姓氏”);
}
}
}
}

在WPF中更改项目时,您几乎总是在绑定数据中进行更改,并将这些更改通知UI。 因此,您必须利用ObservableCollection并实现INotifyPropertyChanged

请不要像在WinForms中那样尝试解决WPF问题,因为架构和编程风格完全不同,您会在某个时候陷入困境

XAML:

  <Grid>
    <StackPanel>
      <ListView x:Name="MyListView">
        <ListView.View>
          <GridView>
            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Width="140" Header="City" DisplayMemberBinding="{Binding City}"/>
          </GridView>
        </ListView.View>
      </ListView>
      <Button Height="50" Click="Button_Click">Click</Button>
    </StackPanel>
  </Grid>
private ObservableCollection<MyData> _data;

public MainWindow()
{
  InitializeComponent();

   _data = new ObservableCollection<MyData>()
                                        {
                                          new MyData() {City = "City1", Name = "Name1"},
                                          new MyData() {City = "City2", Name = "Name2"},
                                          new MyData() {City = "City3", Name = "Name3"},
                                        };
  MyListView.ItemsSource = _data;
}

public class MyData : INotifyPropertyChanged
{
  private string _name;

  public string Name
  {
    get { return _name; }
    set { 
      _name = value;
      OnPropertyChanged("Name");
    }
  }

  private string _city;

  public string City
  {
    get { return _city; }
    set
    {
      _city = value;
      OnPropertyChanged("City");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  public void OnPropertyChanged(string propertyName)
  {
    if (PropertyChanged != null)
    {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
  _data[1].City = "NewValue";
}

点击
代码隐藏:

  <Grid>
    <StackPanel>
      <ListView x:Name="MyListView">
        <ListView.View>
          <GridView>
            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Width="140" Header="City" DisplayMemberBinding="{Binding City}"/>
          </GridView>
        </ListView.View>
      </ListView>
      <Button Height="50" Click="Button_Click">Click</Button>
    </StackPanel>
  </Grid>
private ObservableCollection<MyData> _data;

public MainWindow()
{
  InitializeComponent();

   _data = new ObservableCollection<MyData>()
                                        {
                                          new MyData() {City = "City1", Name = "Name1"},
                                          new MyData() {City = "City2", Name = "Name2"},
                                          new MyData() {City = "City3", Name = "Name3"},
                                        };
  MyListView.ItemsSource = _data;
}

public class MyData : INotifyPropertyChanged
{
  private string _name;

  public string Name
  {
    get { return _name; }
    set { 
      _name = value;
      OnPropertyChanged("Name");
    }
  }

  private string _city;

  public string City
  {
    get { return _city; }
    set
    {
      _city = value;
      OnPropertyChanged("City");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  public void OnPropertyChanged(string propertyName)
  {
    if (PropertyChanged != null)
    {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
  _data[1].City = "NewValue";
}
private observedcollection\u数据;
公共主窗口()
{
初始化组件();
_数据=新的ObservableCollection()
{
新建MyData(){City=“City1”,Name=“Name1”},
新建MyData(){City=“City2”,Name=“Name2”},
新建MyData(){City=“City3”,Name=“Name3”},
};
MyListView.ItemsSource=\u数据;
}
公共类MyData:INotifyPropertyChanged
{
私有字符串\u名称;
公共字符串名
{
获取{return\u name;}
集合{
_名称=值;
不动产变更(“名称”);
}
}
私人字符串(城市),;
公共字符串城市
{
获取{return\u city;}
设置
{
_城市=价值;
不动产变更(“城市”);
}
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
_数据[1]。City=“NewValue”;
}

在WPF中更改项目时,您几乎总是在绑定数据中进行更改,并将这些更改通知UI。 因此,您必须利用ObservableCollection并实现INotifyPropertyChanged

请不要像在WinForms中那样尝试解决WPF问题,因为架构和编程风格完全不同,您会在某个时候陷入困境

XAML:

  <Grid>
    <StackPanel>
      <ListView x:Name="MyListView">
        <ListView.View>
          <GridView>
            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Width="140" Header="City" DisplayMemberBinding="{Binding City}"/>
          </GridView>
        </ListView.View>
      </ListView>
      <Button Height="50" Click="Button_Click">Click</Button>
    </StackPanel>
  </Grid>
private ObservableCollection<MyData> _data;

public MainWindow()
{
  InitializeComponent();

   _data = new ObservableCollection<MyData>()
                                        {
                                          new MyData() {City = "City1", Name = "Name1"},
                                          new MyData() {City = "City2", Name = "Name2"},
                                          new MyData() {City = "City3", Name = "Name3"},
                                        };
  MyListView.ItemsSource = _data;
}

public class MyData : INotifyPropertyChanged
{
  private string _name;

  public string Name
  {
    get { return _name; }
    set { 
      _name = value;
      OnPropertyChanged("Name");
    }
  }

  private string _city;

  public string City
  {
    get { return _city; }
    set
    {
      _city = value;
      OnPropertyChanged("City");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  public void OnPropertyChanged(string propertyName)
  {
    if (PropertyChanged != null)
    {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
  _data[1].City = "NewValue";
}

点击
代码隐藏:

  <Grid>
    <StackPanel>
      <ListView x:Name="MyListView">
        <ListView.View>
          <GridView>
            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
            <GridViewColumn Width="140" Header="City" DisplayMemberBinding="{Binding City}"/>
          </GridView>
        </ListView.View>
      </ListView>
      <Button Height="50" Click="Button_Click">Click</Button>
    </StackPanel>
  </Grid>
private ObservableCollection<MyData> _data;

public MainWindow()
{
  InitializeComponent();

   _data = new ObservableCollection<MyData>()
                                        {
                                          new MyData() {City = "City1", Name = "Name1"},
                                          new MyData() {City = "City2", Name = "Name2"},
                                          new MyData() {City = "City3", Name = "Name3"},
                                        };
  MyListView.ItemsSource = _data;
}

public class MyData : INotifyPropertyChanged
{
  private string _name;

  public string Name
  {
    get { return _name; }
    set { 
      _name = value;
      OnPropertyChanged("Name");
    }
  }

  private string _city;

  public string City
  {
    get { return _city; }
    set
    {
      _city = value;
      OnPropertyChanged("City");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  public void OnPropertyChanged(string propertyName)
  {
    if (PropertyChanged != null)
    {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
  _data[1].City = "NewValue";
}
private observedcollection\u数据;
公共主窗口()
{
初始化组件();
_数据=新的ObservableCollection()
{
新建MyData(){City=“City1”,Name=“Name1”},
新建MyData(){City=“City2”,Name=“Name2”},
新建MyData(){City=“City