2012-09-05 20 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没关系。看我的编辑。 –

相关问题