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