Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使用可观察集合刷新网格_Wpf_Mvvm_Datagrid_Observablecollection - Fatal编程技术网

Wpf 如何使用可观察集合刷新网格

Wpf 如何使用可观察集合刷新网格,wpf,mvvm,datagrid,observablecollection,Wpf,Mvvm,Datagrid,Observablecollection,我是mvvm的初学者,在开发过程中遇到了一个问题,即我试图用可观察的集合刷新我的网格,但这在我的情况下没有发生。我正在使用下面的代码。请让我知道我哪里做错了 窗口的datacontext属性 public ProjectTabView() { InitializeComponent(); var vm = new ProjectTabViewModel(); this.DataContext = vm;

我是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
          } 
     }
公共类项目选项卡ViewModel:ViewModelBase,INotifyPropertyChanged
{
可观察的收集文件;
公共可观测集合绑定文件
{
得到
{
返回_bind文件;
}
设置
{
_BindFiles=值;
RaisePropertyChanged(()=>BindFiles);
}
}
}
**建造师**
BindFiles=新的ObservableCollection();
**视图模型**
public void Bindfiletab()
{
List obj=ProjectTabModel.FilesBinding(globalprojectd);
ObservableCollection obsrvbl=新的ObservableCollection(obj);
如果(obsrvbl.Count>0)
{
BindFiles.Clear();
foreach(obsrvbl中的var项目)
{
添加(项);
}
}
}
public void Execute(对象发送方)
{
GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(()=>
{
//在这里,我调用了上面的绑定文件选项卡方法来刷新我的网格
} 
}

您的问题似乎出现在以下位置:

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);
        }
    }
}
然后填充
obsrvbl
集合:

List<Project> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
ObservableCollection<Project> obsrvbl = new ObservableCollection<Project>(obj);
observeCollection obsrvbl=新的observeCollection(obj);
很多代码都是不必要的…请尝试以下方法:

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

你的代码看起来很熟悉……你有另一个堆栈溢出帐户吗?你的
Bindfiletab()到底是什么
member应该是?一个方法?一个属性?不可能两者兼而有之。在我看来,你似乎根本不具备使用此网站所需的最基本编程知识。不,我是stackoverflow@Sheridan rest的新手。我关注有关此的帖子,但它们并不能解决我的目的。我也从stackoverflow获取了几行代码。有什么问题吗?这个问题似乎离题了,因为您似乎没有最基本的编程知识,甚至可能不理解提供的任何答案。@Sheridan bindfiletab()是在中添加新条目后刷新网格的方法grid@Sheridan请让我知道我在哪里缺少向您提供详细信息,以便您能够理解我的问题谢谢您的回答我也尝试了您的方式,但它显示了新添加的条目在Bindfiles中的计数,但仍然没有刷新网格请显示您的
RaisePropertyChanged
handler then(在编辑您的问题时)。我正在使用mvvm light framework,因此我继承了由“RaisePropertyChanged”组成的“ViewModelBase”。我没有添加我的自定义handler我编辑了我的问题如何使用“RaisePropertyChanged”@sheridanpl请展示您如何设置
窗口的
DataContext
属性(在您的问题中)。