C# 将数据从textBox绑定到ListView
我有一个程序,将数据从4文本框绑定到ListView XAML代码:C# 将数据从textBox绑定到ListView,c#,wpf,xaml,listview,bind,C#,Wpf,Xaml,Listview,Bind,我有一个程序,将数据从4文本框绑定到ListView XAML代码: <Window x:Class="TestBindingData.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Hei
<Window x:Class="TestBindingData.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="324" Width="592">
<Grid>
<ListView Height="209" HorizontalAlignment="Left" Margin="12,64,0,0" Name="listView1" VerticalAlignment="Top" Width="546" >
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding STT}" Header="STT" Width="50"/>
<GridViewColumn DisplayMemberBinding="{Binding HVT}" Header="Name" Width="200"/>
<GridViewColumn DisplayMemberBinding="{Binding Age}" Header="Age" Width="50"/>
<GridViewColumn DisplayMemberBinding="{Binding State}" Header="State" Width="200"/>
</GridView>
</ListView.View>
</ListView>
<TextBox Height="22" HorizontalAlignment="Left" Margin="99,25,0,0" Name="textBox1" VerticalAlignment="Top" Width="45" />
<TextBox Height="22" HorizontalAlignment="Left" Margin="150,25,0,0" Name="textBox2" VerticalAlignment="Top" Width="138" />
<TextBox Height="22" HorizontalAlignment="Left" Margin="294,25,0,0" Name="textBox3" VerticalAlignment="Top" Width="45" />
<TextBox Height="22" HorizontalAlignment="Left" Margin="345,25,0,0" Name="textBox4" VerticalAlignment="Top" Width="92" />
<Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="461,27,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
</Window>
主窗口代码:
namespace TestBindingData
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
class person
{
public string STT { get; set; }
public string HVT { get; set; }
public string Age { get; set; }
public string State { get; set; }
}
private void button1_Click(object sender, RoutedEventArgs e)
{
List<person> people = new List<person>();
people.Add(new person() { STT = textBox1.Text.ToString(), HVT = textBox2.Text.ToString(), Age = textBox3.Text.ToString(), State = textBox4.Text.ToString() });
this.listView1.ItemsSource = people;
}
}
}
命名空间TestBindingData
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
班主任
{
公共字符串STT{get;set;}
公共字符串HVT{get;set;}
公共字符串年龄{get;set;}
公共字符串状态{get;set;}
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
列表人员=新列表();
添加(new person(){STT=textBox1.Text.ToString(),HVT=textBox2.Text.ToString(),Age=textBox3.Text.ToString(),State=textBox4.Text.ToString());
this.listView1.ItemsSource=人;
}
}
}
当我单击“添加”按钮时,程序将添加一行,其中包含人员信息。但是我不能添加第2行,第3行,。。。在第一排之后!
请帮忙,谢谢 您应该使用可观察集合作为源,这样您就不需要每次都设置项源。可观察集合将在更改时发出通知,以便UI对列表中的新添加内容作出响应 试试这个->
public partial class MainWindow : Window
{
private ObservableCollection<person> _people;
public ObservableCollection<person> people
{
get { return _people; }
set { _people = value; }
}
public MainWindow()
{
InitializeComponent();
people = new ObservableCollection<person>();
}
public class person
{
public string STT { get; set; }
public string HVT { get; set; }
public string Age { get; set; }
public string State { get; set; }
}
public void button1_Click(object sender, RoutedEventArgs e)
{
people.Add(new person() { STT = textBox1.Text.ToString(), HVT = textBox2.Text.ToString(), Age = textBox3.Text.ToString(), State = textBox4.Text.ToString() });
this.listView1.ItemsSource = people;
}
}
公共部分类主窗口:窗口
{
私人可观察的收集人;
公众观察收集人
{
获取{return\u people;}
设置{u people=value;}
}
公共主窗口()
{
初始化组件();
人员=新的可观察集合();
}
公共阶层人士
{
公共字符串STT{get;set;}
公共字符串HVT{get;set;}
公共字符串年龄{get;set;}
公共字符串状态{get;set;}
}
公共无效按钮1\u单击(对象发送者,路由目标)
{
添加(new person(){STT=textBox1.Text.ToString(),HVT=textBox2.Text.ToString(),Age=textBox3.Text.ToString(),State=textBox4.Text.ToString());
this.listView1.ItemsSource=人;
}
}
这将有效:)只需将listview绑定到ObservableCollection,它将自动更新列表的内容
<ListView ItemsSource="{Binding Persons}">
...
</ListView>
...
并在ViewModel(或代码隐藏)中声明财产人:
Public ObservableCollection<Person> Persons
{
...
}
公众可观察收集人员
{
...
}
诀窍在于ObservableCollection实现INotifyCollectionChanged,因此它跟踪何时从集合中添加或删除项并更新源。为什么要使用文本框添加数据?如果您使用datagrid并将一个可观察的集合绑定到它,则不需要文本框和ListView。当然,您也可以单独使用ListView进行操作。正如@CSharpYouDull所指出的,您应该将ListView绑定到viewmodel中的ObservableCollection,然后命令将按钮绑定到viewmodel,在那里您可以将数据添加到现有的ObservableCollection ObservableCollection代表一个提供添加、删除项目或刷新整个列表时的通知。将某些控件(例如datagrid或itemscollection)的ItemsSource属性设置为每个IEnumerable时,没有应用通知服务。但如果我们将其绑定到ObservableCollection,则列表中的任何更改都会被控件识别……如果您觉得有用,请勾选它:)