【问题标题】:how to refresh grid using observable collection如何使用可观察集合刷新网格
【发布时间】:2014-09-01 22:26:12
【问题描述】:

我是 mvvm 的初学者,在开发时我遇到了问题,即我试图用可观察的集合刷新我的网格,但在我使用下面的代码的情况下没有发生这种情况,请让我知道我在哪里做错了

窗口的datacontext属性

 public ProjectTabView()
        {
            InitializeComponent();
            var vm = new ProjectTabViewModel();
            this.DataContext = vm;
            vm.ClosingRequest += (sender, e) => this.Close();

        }

XAML

<DataGrid ItemsSource="{Binding BindFiles,UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single"></DataGrid >

视图模型中的属性

 public class ProjectTabViewModel : ViewModelBase, INotifyPropertyChanged
    {

    ObservableCollection<Project> _BindFiles;
        public ObservableCollection<Project> BindFiles
        {
            get
            {
                return _BindFiles;
            }
            set
            {
                _BindFiles = value;
                RaisePropertyChanged(() => BindFiles);
            }
        }
}

**constructor**

     BindFiles = new ObservableCollection<Project>();

**ViewModel**

public void Bindfiletab()
        {
            List<Project> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
            ObservableCollection<Project> obsrvbl = new ObservableCollection<Project>(obj);
            if (obsrvbl.Count > 0)
            {
                BindFiles.Clear();
                foreach (var item in obsrvbl)
                {
                    BindFiles.Add(item);
                }
            }

        }



public void Execute(object sender)
     {
        GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(()=>
         {
          //here i have called my above bind file tab method to refresh  my grid
          } 
     }

【问题讨论】:

  • 您的代码看起来很熟悉...您还有另一个 Stack Overflow 帐户吗?你的Bindfiletab() 成员到底应该是什么?一个方法?财产?不可能两者兼而有之。在我看来,您似乎根本不具备使用该网站所需的最基本的编程知识。
  • 不,我是 stackoverflow 的新手 @Sheridan rest 我观看了有关此的帖子,但它们并没有解决我的目的。我也从 stackoverflow 获取了几行代码。有什么问题吗?
  • 这个问题似乎离题了,因为您似乎没有最基本的编程知识水平,甚至可能不理解任何提供的答案。
  • @Sheridan bindfiletab() 是在网格中添加新条目后刷新网格的方法
  • @Sheridan 请让我知道我在向您提供详细信息时缺少哪些地方,以便您了解我的问题

标签: wpf mvvm datagrid observablecollection


【解决方案1】:

您的问题似乎出现在这里:

public void Bindfiletab()
{
    List<Project> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
    ObservableCollection<Project> obsrvbl = new ObservableCollection<Project>(obj);
    if (obsrvbl.Count > 0)
    {
        BindFiles.Clear();
        foreach (var item in obsrvbl)
        {
            BindFiles.Add(item);
        }
    }
}

我只能假设这填充了obj 集合:

List<Project> obj = ProjectTabModel.FilesBinding(GlobalProjectID);

然后这会填充obsrvbl 集合:

ObservableCollection<Project> obsrvbl = new ObservableCollection<Project>(obj);

很多这样的代码是不必要的……试试这个吧:

public void Bindfiletab()
{
    List<Project> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
    BindFiles = new ObservableCollection<Project>(obj);
}

【讨论】:

  • 感谢您的回复,我也尝试过您的方法,但它在 Bindfiles 中显示计数并添加了新条目,但仍无法刷新网格
  • 然后请出示您的RaisePropertyChanged 处理程序(在对您的问题进行编辑时)。
  • 我正在使用 mvvm light 框架,所以我继承了由“RaisePropertyChanged”组成的“ViewModelBase”,我没有添加我的自定义处理程序
  • 我已经编辑了我的问题我如何使用“raisepropertychanged”@Sheridan
  • 请说明您如何设置DataContextDataContext 属性(在您的问题中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多