2012-09-05 34 views
1

像往常一樣,我做了一點研究,但無法在網站或其他地方找到答案。如果你能指點我一個存在的問題,我會很感激。否則,這裏是問題:ListView不會更新,儘管綁定到DataTable

我有一個ListView對象綁定到一個DataTable對象。請參見下面的定義:

<ListView Name="MyList"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn x:Name="Column1Name" DisplayMemberBinding="{Binding Path=Column1}" /> 
       <GridViewColumn x:Name="Column2Name" DisplayMemberBinding="{Binding Path=Column2}" /> 
       <GridViewColumn x:Name="Column3Name" DisplayMemberBinding="{Binding Path=Column3}" /> 
       <GridViewColumn x:Name="Column4Name" DisplayMemberBinding="{Binding Path=Column4}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

綁定代碼如下:

DataTable items = new DataTable(); 
items = DatabaseService.GetMyItems(20, true, items); 
Binding binding = new Binding(); 
binding.Source = items.DefaultView; 
binding.Mode = BindingMode.OneWay; 
MyList.SetBinding(ListView.ItemsSourceProperty, binding); 

執行查詢是如下的實際代碼:

/** Parameters: commandText = <sql>, table = items */  
using (DbConnection connection = new SqlConnection(Project.Properties.Settings.Default.ConnectionString)) 
     { 
      using (DbCommand command = connection.CreateCommand()) 
      { 
       command.CommandText = commandText; 
       command.CommandType = CommandType.Text; 

       using (DbDataAdapter dataAdapter = new SqlDataAdapter()) 
       { 
        dataAdapter.SelectCommand = command; 
        dataAdapter.Fill(table); 
       } 
      } 
     } 

此代碼工作第一次,但當我在數據更改後再次調用GetMyItems方法時,數據不刷新。

我在做什麼錯?

回答

1

如果它的第一次工作是從構造函數工作,一旦加載了你的視圖,那麼你需要notify that your property change

在您GetMyItems方法使用:

OnPropertyChanged("items"); 

然後聲明方法:

// Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

,如果你不使用預建MVVM框架從NotifyPropertyChanged對象繼承,以一貫的在ViewModels中獲取OnPropertyChanged方法。

無關緊要的是,您在DataTable中有一個可觀察的屬性,問題是更改通知。您需要一個ObservableCollection。您可以將DataTable(DataSet由一個或多個DataTables構造)轉換爲ObservableCollection,然後將其轉換爲bind ObservableCollection to UI element

+0

DataTable已經在.Net框架API(使用4.0)-'System.Data.DataTable'中。可觀察列表屬性是'Datatable.DefaultView'有一個名爲'ListChanged'的事件([link here](http://msdn.microsoft.com/en-us/library/system.data.dataview(v = vs.100 )的.aspx))。 – Sinker

+0

@Sinker沒關係。看我的編輯。 –

相關問題