2012-01-06 8 views
0

DataGridを含むSilverlightページがあります。ViewModelにバインドされています.ViewModelの初期化時に、データベースからすべてのレコードをフェッチするためにRIAサービスを呼び出しました。この子フォームには、データベースにレコードを追加するDataFormが含まれています。レコードを再度追加すると、RIAサービスとRaisedPropertyChangedイベントを使用してすべてのレコードがフェッチされます。ただし、DataGridには新しいレコードが表示されません。何が問題なのですか、DataGridがリフレッシュされない理由...ビューとビューモデルのコードは以下のとおりです。Refresh DataGrid MVVM Silverlight

//XAML of View 
<sdk:DataGrid x:Name="grd_classes" ItemsSource="{Binding Classes,Mode=TwoWay}" AutoGenerateColumns="False" Width="300" Grid.Column="1" > 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTextColumn Header="Class Name" Width="140" Binding="{Binding Name,Mode=TwoWay}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" /> 
       <sdk:DataGridTextColumn Header="Alias" Width="140" Binding="{Binding Alias,Mode=TwoWay}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" /> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 

//Code of viewmodel 
namespace SMS.ViewModel 
{ 
    public class ClassesViewModel:ViewModel 
    { 
     private ClassesContext _context = new ClassesContext(); 

     public ClassesViewModel() 
     { 



      _context.Load<Class>(_context.GetClassesQuery(), OnLoad, true); 

     } 



     public EntitySet<Class> Classes 
     { 
      get 
      { 
       return _context.Classes; 
      } 
     } 





    public void AddNewClass(object parameter) 
     { 
      for (int i = 0; i <= newClass.Count - 1;i++) 
      { 
       _context.Classes.Add(newClass[i]); 
      } 
      _context.SubmitChanges(OnSave,null); 

     } 

     private void OnLoad(LoadOperation op) 
     { 
       if (!op.HasError) 
       { 

        RaisePropertyChanged("Classes"); 
       } 

     } 
    private void OnSave(SubmitOperation op) 
     { 
      if (op.IsComplete) 
      { 
       if (op.HasError) 
       { 
        MessageBox.Show("Error"); 
       } 
       else 
       { 
        _context = new ClassesContext(); 
        _context.Load<Class>(_context.GetClassesQuery(), OnLoad, true); 

        DialogResult = true; 
       } 
      } 

     } 





    } 
} 
+0

あなたが '' OnLoad'でRaisePropertyChanged'を実行した後 'Classes'が呼び出されている?のゲッターどうかを確認しましたか – dmusial

+0

また確認します。Classes.Count> 0 – codeSetter

答えて

0

grd_classes DataContextを設定しましたか?またRaisePropertychangedイベントを必要とするだけでなく

_context.Load<Class>(_context.GetClassesQuery(), OnLoad, true); 
RaisePropertyChanged(() => Classes); 
+0

グリッドgrd_classesにはitemSourcesクラスがあり、_contextのLoadOperation後にプロパティ変更イベントを発生させています –