我使用ListView和items绑定为ObservableCollection。每个对象都有get,set,例如:
public string NamePar
{
get
{
if (_namePar == null)
{
if (_productID > 0)
{
using (SqlConnection conn = new SqlConnection(cString.c_String))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("...", conn))
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
_namePar = rdr[0].ToString();
}
}
}
}
}
}
return _namePar;
}
set
{
if (_namePar == value)
return;
_namePar = value;
NotifyPropertyChanged("NamePar");
}
}
所以我对它有疑问:
非常感谢您的帮助! :)
答案 0 :(得分:3)
Noooooooooooooooooooo!
不要在你的吸气剂中打开SQLConnections
!
更好的方法是只在需要时设置NamePar
属性。
这是我的意思的一个例子:
为您的商品创建一个类,如下所示:
public class MyItem
{
public string Name { get; set; }
...
}
创建项目列表的任何人都有责任填充其属性值。因此,您需要创建一个刷新列表的方法。例如:
public void Refresh()
{
//Open a SQL Connection
//Get the records you need
//Populate an observable collection of [MyItem] with the records from the database.
}
通过将食物链中较高的SQL连接内容移动到视图模型,您已经获得了一些性能,因为您不再在属性获取者中运行查询。