ObservableCollection不更新GUI

时间:2014-07-10 09:16:13

标签: wpf mvvm observablecollection

我正在尝试使用可观察的集合来更新我的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
             }
        });
}

1 个答案:

答案 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";
        }
    }