【发布时间】:2014-08-31 14:25:37
【问题描述】:
我正在尝试使用可观察集合更新我的 UI,但在我的情况下我没有发生这种情况,即使我尝试使用“将数据编组到 Gui 线程”来更新它,这甚至不适合我。这里我正在更新我的代码,请让我知道我错在哪里。 XAML
<DataGrid ItemsSource="{Binding BindFiles, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single" CanUserSortColumns="False" x:Name="dataGrid1" BorderBrush="Transparent" Canvas.Left="1" Canvas.Top="50" Background="{Binding ElementName=gd,Path=Background}"></datgrid>
属性
ObservableCollection<ProjectTabModel> _BindFiles;
public ObservableCollection<ProjectTabModel> BindFiles
{
get
{
return _BindFiles;
}
set
{
_BindFiles = value;
RaisePropertyChanged(()=>BindFiles);
}
}
查看模型
#region BindProjectFiles
public void Bindfiletab()
{
List<ProjectTabModel> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
ObservableCollection<ProjectTabModel> obsrvbl = new ObservableCollection<ProjectTabModel>(obj);
if (obsrvbl.Count > 0)
{
BindFiles.Clear();
foreach (var item in obsrvbl)
{
BindFiles.Add(item);
}
}
else
{
NoFileFound = "No File found";
}
}
private class DragOverEvent : ProjectTabViewModel, ICommand
{
public event EventHandler CanExecuteChanged;
public void Execute(object sender)
{
GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//my code stuff here
}
});
}
【问题讨论】:
-
你的代码一团糟。您有一个视图模型类,它也是
ICommand,但名为...Event。您正在视图模型中处理LblMessageForFilesUI 控件,该控件 100% 与 MVVM 相对,因此您显然不了解 MVVM。我建议您在继续您的项目之前,重新阅读和学习 WPF 和 MVVM。您缺少太多的知识,我们无法在这里为您提供帮助……您至少需要在此处提问之前学习基础知识。 -
@Sheridan 根据我的研究,如果我们想对 View 做任何事情,我们会为其创建一个属性并将其绑定到视图中,这也是我正在使用的 ahev 属性“LblMessageForFiles”的情况。但是我面临的问题是,在添加任何新条目后 UI 不会刷新。还有什么你不了解的。
-
还有什么你不明白的...我???你在开玩笑?
System.Windows.Visibility enum与 UI 相关,并且 不 属于您的视图模型。为什么我认为LblMessageForFiles是一个UI 元素?因为出于某种奇怪的原因,您在名称中添加了Lbl前缀......再次,您的代码是一团糟。 -
您没有提供足够的信息,这是无法回答的。您甚至没有显示带有绑定的 xaml。提供重现问题的最少代码,请参阅stackoverflow.com/help/mcve。附带说明:是的,这段代码远低于标准。
-
暴露 ObservableCollections 的属性应该是只读的。您应该从集合中添加/删除项目。
标签: wpf mvvm observablecollection