C# 运行时未从SQL Server数据库更新可观察集合
我已经实现了INotifyPropertyChanged和Observable集合,但是我在数据库中所做的更改在运行时不会反映在DataGrid上UI不会更新。我是c和WPF的新手。这是我的密码 模型和视图模型: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();
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也不会更新。我该怎么做呢?那么我该如何实现这个功能呢?正如在你的帖子下面的评论中提到的。