2011-06-29 5 views
0

RIA DataDomainServiceを使用しているSilverlightアプリがあります。シンプルな2ウェイデータグリッドをリストにバインドする<T>質問

SilverlightアプリケーションにはDataGridが1ページあります。

DataGridのItemSourceプロパティをLoadedイベントのリストに設定しました。

//gets the list 
List<Data> data = GetTheList();//returns the list of data 
dataGrid.ItemSource = data; 

これは初めての動作です。 2回目は同じ行を使用しますが、リストに新しいDataオブジェクトを挿入し、リストをdataGridにバインドします。 dataGrid.ItemSource = dataグリッドは更新されません。 グリッドは同じです。 DataGridのタグでXAML側

、:

ItemSouce = {Binding data, Mode=TwoWay} 

このバインディング正しいですか?なぜそれは新しいリストで2回目ではなく初めてバインドするのですか?

答えて

2

まず、XAMLとコードの両方でItemSourceを設定すると、コードビハインドがXAMLバインディング設定を上書きします。

Listの代わりにObservableCollectionを使用すると、アイテムが追加または削除されたときにViewに自動的に通知されます。次に、data.ItemSourceを複数回設定する必要はありません。

ObservableCollection<Data> data = GetTheList(); 
dataGrid.ItemSource = data; 

ObservableCollectionからアイテムを追加または削除すると、グリッドが自動的に変更されます。 GetTheList()がObservableCollectionを返すようにし、それを使って 'Data'オブジェクトを格納する必要があります。

*編集 - ObservableCollectionを既存のコードとうまく組み合わせることができない場合は、それを更新する前にItemsSourceをnullに設定してみてください。例:

private void updateMyDataGrid() 
{ 
    List<Data> data = GetTheList(); 
    dataGrid.ItemSource = null; 
    dataGrid.ItemSource = data; 
} 
+0

を私はデータ=新しいのObservableCollection(GetTheList())のObservableCollectionを追加しました。 XAML ItemSource = {Binding}を変更しましたが、運がまったくありません。私は{バインディングデータ、Mode = TwoWay}も試みました。何をすべきか? – InfoLearner

+0

GetTheList()メソッドの内容は何ですか?これでもList <>が返されますか? List <>を完全に削除し、ObservableCollection <>を使用してアイテムを格納し、そこにアイテムを追加/削除すると、データグリッドが自動的に更新されます。 –

+0

私の編集も参照してください。変更する前に、ItemSourceをnullに設定するのが最も簡単です。 –

0

まず、あなたは「再バインド」と、新しいデータオブジェクトがリストに追加されたときに、データグリッドが自動的に更新されますつまり、再びitemsourceを設定を行う必要がありいけません。

このリンクは役立つはず:あなたはObservableCollectionを使用する必要があり、クラスがINotifyPropertyChangedインタフェースを実装する必要がありhttp://www.codeproject.com/KB/grid/DataGrid_Silverlight.aspx

0

ObservableCollection<Data> data = GetTheList(); 
dataGrid.ItemSource = data; 

このような何か:

private ObservableCollection<Data>data; 
    public ObservableCollection<Data>Data{ 
     get { return data; } 
     set 
     { 
      data=value; 
      // Call NotifyPropertyChanged when the property is updated 
      NotifyPropertyChanged("Data"); 
     } 
    } 


// Declare the PropertyChanged event 
public event PropertyChangedEventHandler PropertyChanged; 

// NotifyPropertyChanged will raise the PropertyChanged event passing the 
// source property that is being updated. 
public void NotifyPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

私の.xaml.csページでは、INotifyPropertyChangedを実装しましたが、if(PropertyChanged!= null)は常にnullです。また、私はDataクラスのInotifyPropertyChangedインターフェイスを実装し、NotifyPropertyChanged( "<プロパティ名>")を追加しましたが、まだ運がありません。 私が間違っていることを知っていますか? – InfoLearner

+0

データセッターメソッドとゲッターメソッドを貼り付けることはできますか? – texmex5