2011-10-17 6 views
1

ObserveableCollection(MyClass)source1にバインドされたDatagridを持っています。ObserveableCollectionのプロパティが変更されたときにSilverlightでDataGridを更新する方法

MyClassのは、2つのプロパティがあります。文字列名、int型のAGE

今私がコレクションに50のMyClassのオブジェを持って、私は私のDataGrid内の50行を持っていることを意味します。 すべての行を表示したい場合、私はスクロールする必要があり、それは大丈夫です!

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){ 
int index = dataGrid.SelectedIndex; 
obsCollection[index].Name="AAAAA"; 
} 

私は行をクリックするたびに、その行の名前を文字列Name = "AAAAAA"に変更します。

私が上下にスクロールして、その行がもうデータグリッドに表示されない場合、すべてのことが機能します。何とか行が見えなくなり、後で表示されると、行は更新されます。私は周りにスクロールし、その行に戻って、行が今すぐ再度datagridでSHOWN、値はupdatetされています。

しかし、私は瞬時に変化したい!行を選択/クリックすると、名前が「AAAAAA」に変更されます。 私は更新を得るために、その行を目に見えないようにしたくありません。

編集:私はdatagrid.itemsssource = nullを使用できません。私は選択の無限ループを得るから

+0

あなたのアイテム(MyClass)はINotifyPropertyChangedを実装していますか?これは、UIがアイテム自体の変更を確認するための要件です。 –

答えて

2

一般的な種類のObservableCollectionはINotifyPropertyChangedを実装する必要があります。たとえば、Employeeのコレクションがあり、従業員の値が変更されたときにUIが自動的に更新されるようにしたいとします。

  1. Employeeクラスを作成し、INotifyPropertyChangedを実装する必要があります。

    public class Employee : INotifyPropertyChanged 
    { 
        public string FirstName 
        { 
         get { return this._firstName; } 
         set 
         {   
          this._firstName = value; 
          this.NotifyPropertyChanged("FirstName"); 
         } 
        } 
    
        public event PropertyChangedEventHandler PropertyChanged; 
    
        private void NotifyPropertyChanged(String info) 
        { 
         if (PropertyChanged != null) 
         { 
          PropertyChanged(this, new PropertyChangedEventArgs(info)); 
         } 
        } 
    } 
    
  2. 使用従業員ジェネリックパラメータの型として使用すると、のObservableCollectionに従業員の値を変更すると、値はあなたのためのUIを更新します、今、このObservableCollection<Employee>

  3. のようなのObservableCollectionします。

+0

._firstNameとはどういう意味ですか? – Gero

+0

ああ取得する。パブリック文字列_firstName; – Gero

+0

大きなTHX Ekk。問題が解決しました! – Gero

関連する問題