我已经实现了INotifyPropertyChanged
和Observable集合,但我在数据库中所做的更改未在运行时的DataGrid
(UI未更新)中反映出来。林新的C#和WPF。这是我的代码。可观察集合在运行时不从SQL Server数据库更新
模型和视图模型:
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);
}
}
}
}
https://msdn.microsoft.com/en-us/library/62xk7953%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 –
你真的认为 “SELECT * FROM生命体征” 是动态的? – Paparazzi
有其他选择吗?即使我更新显示字段中的值,UI也不会更新。我如何去做这件事? – Reems9