C# 运行时未从SQL Server数据库更新可观察集合

C# 运行时未从SQL Server数据库更新可观察集合,c#,sql-server,wpf,data-binding,observablecollection,C#,Sql Server,Wpf,Data Binding,Observablecollection,我已经实现了INotifyPropertyChanged和Observable集合,但是我在数据库中所做的更改在运行时不会反映在DataGrid上UI不会更新。我是c和WPF的新手。这是我的密码 模型和视图模型: namespace WpfApplication4.ViewModels { public class MainViewModel : INotifyPropertyChanged { Model _myModel = new Model();

我已经实现了INotifyPropertyChanged和Observable集合,但是我在数据库中所做的更改在运行时不会反映在DataGrid上UI不会更新。我是c和WPF的新手。这是我的密码

模型和视图模型:

namespace WpfApplication4.ViewModels
{
    public class MainViewModel : INotifyPropertyChanged
    {
        Model _myModel = new Model();
        private ObservableCollection<VItalView> _vitalview = new ObservableCollection<VItalView>();
        public ObservableCollection<VItalView> Vitalview
        {
            get { return _vitalview; }
            set
            {
                _vitalview = value;
                OnPropertyChanged("Vitalview");
            }
        }
        public MainViewModel()
        {
            initializeload();
        }
        private void initializeload()
        {
            DataTable table = _myModel.getData();

            for (int i = 0; i < table.Rows.Count; ++i)
                Vitalview.Add(new VItalView
                {
                    Weight = Convert.ToInt32(table.Rows[i][0]),
                    Height = Convert.ToInt32(table.Rows[i][1]),
                    BMI = Convert.ToInt32(table.Rows[i][2]),
                });
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyname)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyname));
        }
    }

    public class Model
    {
        public DataTable getData()
        {
            DataTable ndt = new DataTable();
            SqlConnection con = new SqlConnection("Data Source=DESKTOP-QTFGN00; Initial Catalog=VITALS;Integrated Security=true");

            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM Vitals", con);


            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.SelectCommand = cmd;

            da.Fill(ndt);
            return ndt;
        }
    }
}
以及以下观点:

namespace WpfApplication4.Models
{
    public class VItalView : INotifyPropertyChanged, IDataErrorInfo
    {
        public VItalView()
        {
        }

        private float weight;

        public float Weight
        {
            get { return weight; }
            set
            {
                weight = value;
                OnPropertyChanged("Weight");
            }
        }

        private float height ;

        public float Height
        {
            get { return height; }
            set
            {
                height = value;
                OnPropertyChanged("Height");
            }
        }

        private float bmi;

        public float BMI
        {
            get { return bmi; }
            set
            {
                bmi = value;
                OnPropertyChanged("Bmi");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private VItalView vv;

       protected void OnPropertyChanged(string propertyname)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyname));
        }

        public string Error
        {
            get { return null; }
        }

        public string this[string columnName]
        {
            get
            {
                string error = null;
                switch (columnName)
                {
                    case "Weight":
                        if (weight<10)
                        {
                            error = "Fdddd";
                        }
                        break;

                    case "Height":
                        if ((height < 18) || (height > 85))
                        {
                            error = "bhhj.";
                        }
                        break;
                    case "BMI":
                        if (bmi>70)
                        {
                            error = "xxx";
                        }
                        break;
                }
                return (error);
            }
        }
    }
}

好吧,这样不行。实际上,当修改此属性时,ObservableCollection将起作用


SQL Server不会通知应用程序已在其中添加任何内容。

您真的认为SELECT*FROM Vitals是动态的吗?有其他选择吗?即使我更新了显示字段中的值,UI也不会更新。我该怎么做呢?那么我该如何实现这个功能呢?正如在你的帖子下面的评论中提到的。