【问题标题】:Refresh DataGrid MVVM Silverlight刷新 DataGrid MVVM Silverlight
【发布时间】:2012-01-06 07:02:54
【问题描述】:

我有一个 Silverlight 页面,其中包含一个 DataGrid。它绑定到一个 ViewModel。在 ViewModel 初始化时,我调用了 RIA 服务来从数据库中获取所有记录。我在页面上有另一个按钮,它打开一个单击子窗体。此子窗体包含向数据库添加记录的 DataForm,在再次成功添加记录后,我使用 RIA 服务和 RaisedPropertyChanged 事件获取了所有记录。但是 DataGrid 不显示新记录。有什么问题以及为什么DataGrid没有被刷新……view和viewmodel的代码写在下面。

//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;
                }
            }

        }





    }
}

【问题讨论】:

  • OnLoad 中执行RaisePropertyChanged 后是否检查了Classes 的getter 是否被调用?
  • 也验证 Classes.Count > 0

标签: silverlight-4.0


【解决方案1】:

你设置了 grd_classes DataContext 了吗?还需要 RaisePropertychanged 事件

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

【讨论】:

  • Grid grd_classes 有 itemSources 类,我已经在 _context 的 LoadOperation 之后引发了属性更改事件
猜你喜欢
  • 2016-10-30
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多