2012-09-05 2 views
1

평상시처럼 약간의 조사를했지만 사이트 또는 다른 곳에서 답변을 찾을 수 없습니다. 기존 질문에 대해 지적 해 주시면 고맙겠습니다. 그렇지 않은 경우 여기에 질문이 있습니다.DataTable에 바인딩에도 불구하고 ListView가 업데이트되지 않습니다.

ListView 개체가 DataTable 개체에 바인딩되어 있습니다.

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

다음과 같이 쿼리가 수행하는 실제 코드 : 바인딩 코드는 다음과 같다

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

: 아래의 정의를 참조

/** 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"); 

그리고 방법을 선언 : 당신이 MVVM 프레임 워크에 위해 NotifyPropertyChanged 개체에서 상속 할 수있는 미리 만들어진을 사용하지 않는 경우

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

그것은 보통이다 ViewModels에서 OnPropertyChanged 메서드를 가져옵니다.

데이터 테이블 내에 관찰 가능한 속성이 있는지 여부는 중요하지 않으며 문제는 변경 알림입니다. ObservableCollection이 필요합니다. DataTable (하나 이상의 DataTable로 구성된 DataSet)을 ObservableCollection으로 변환 한 다음 bind ObservableCollection to UI element으로 변환 할 수 있습니다.

+0

DataTable은 이미 .NET Framework 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

@ 싱크 그것은 중요하지 않습니다. 내 편집을 참조하십시오. –

관련 문제