我正在尝试使用可观察的集合来更新我的UI但是我没有在我的情况下发生,即使我已经尝试使用&#34更新它;将数据编组到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
}
});
}
答案 0 :(得分:0)
我想说你的代码确实需要重构。使用下面的代码更改代码,将断点设置为BindFiles并跟踪其状态。顺便说一句,您不应该在ViewModel中编写与UI相关的代码,例如Visibility.Hidden。只需定义一个属性即可更改控件的可见性状态。
public void BindFileTab()
{
List<ProjectTabModel> obj = ProjectTabModel.FilesBinding(GlobalProjectID);
BindFiles = new ObservableCollection<ProjectTabModel>(obj);
LblMessageForFiles = Visibility.Hidden;
if (BindFiles.Count > 0)
{
LblMessageForFiles = Visibility.Hidden;
}
else
{
LblMessageForFiles = Visibility.Visible;
NoFileFound = "No File found";
}
}