2013-07-29 90 views
0

我有一個程序將數據從4個文本框綁定到ListView。將數據從textBox綁定到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" 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; 
     } 
    } 
} 

當我點擊添加按鈕,程序會添加包含人的一行信息。但是我不能在第1行之後添加第2行,第3行! 請幫忙,謝謝!

+0

爲什麼要用文本框添加數據?如果您使用datagrid並將可觀察集合綁定到它,則不需要textbox和ListView。 Offcourse你也可以單獨使用ListView。 – whoisthis

+0

由於@CSharpYouDull指出你應該將你的listview綁定到你的viewmodel中的一個ObservableCollection,然後Command將按鈕綁定到你的viewmodel,在那裏你將數據添加到現有的ObservableCollection中 – whoisthis

+0

OK,謝謝@bjoshi – user2627651

回答

0

您應該使用可觀察集合作爲源,您不需要每次都設置項目源。可觀察的集合將通知更改,以便UI將響應列表中的新增內容。

0

嘗試這個 - >

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; 
      } 

     } 

這將工作.. :)

+0

謝謝!我嘗試你的代碼,行!但你能解釋一下嗎? – user2627651

+0

ObservableCollection表示一個動態數據集合,用於在項目添加,刪除或整個列表刷新時提供通知。將某些控件的ItemsSource屬性(例如datagrid或itemscollection)設置爲每個IEnumerable時,不會應用通知服務。 但是,如果我們將它綁定到ObservableCollection,則列表中的任何更改都會被控件識別...勾選它如果您覺得它有幫助.. :) – Vishal

0

您的列表視圖就綁定到一個ObservableCollection,它會自動更新列表中的內容。

<ListView ItemsSource="{Binding Persons}"> 
... 
</ListView> 

,並在視圖模型(或代碼隱藏)財產申報人:

Public ObservableCollection<Person> Persons 
{ 
... 
} 

的訣竅是的ObservableCollection實現INotifyCollectionChanged,所以當項目被添加或從集合中刪除並更新其跟蹤資源。

+0

感謝您的幫助! – user2627651