2014-07-11 49 views
0

我是初学者在mvvm开发中我卡在问题ie ie我想刷新我的网格与可观察的集合,但是这不是发生在我的情况下我使用下面的代码请让我知道我做错了如何使用可观察的集合来刷新网格

窗口的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 
      } 
    } 
+0

您的代码看起来很熟悉...你有另一个堆栈溢出帐户?你的'Bindfiletab()'成员应该是什么?一个方法?属性?它不能兼而有之。在我看来,您似乎没有使用本网站所需的最基本的编程知识。 – Sheridan

+0

不,我是新来的stackoverflow @Sheridan休息我观看这篇文章,但他们没有解决我的目的。我从stackoverflow获取几行代码too.Is错误? – stylishCoder

+0

这个问题似乎是无关紧要的,因为你似乎没有最基本的编程知识水平,甚至可能不理解任何提供的答案。 – Sheridan

回答

0

你的问题似乎发生在这里:

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); 
} 
+0

感谢您的回复我已经尝试了你的方式,但它显示了新的添加入口的绑定文件数量,但它仍然不刷新网格 – stylishCoder

+0

请显示您的RaisePropertyChanged处理程序然后(在编辑您的问题)。 – Sheridan

+0

广告我使用mvvm轻型框架,所以我继承了“RaisePropertyChanged”组成的“ViewModelBase”我没有添加我的自定义处理程序 – stylishCoder