【发布时间】:2015-05-19 11:47:24
【问题描述】:
我正在使用 ListView 并将项目绑定为 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");
}
}
所以我对此有疑问:
- 每次get中使用SqlConnection是否正确?
- 我是否应该使用一个 SqlConnection 并在不打开新的情况下使用它 每次?
- 为什么当我在 ListView 中选择项目时,它每次都会获取 (有时甚至 20 倍到相同的值?),例如它去 productCount,然后到 productPrice,然后再次计数等?我知道 也就是说,如果 value != null 那么它只会返回以前的(私有) 值,但也许我做错了什么
非常感谢您的帮助! :)
【问题讨论】:
-
为了性能,根据您的环境,您不应在每次获取时都打开 SQL 连接。您可以使用构造函数一次从数据库中读取所有值。在此之后,如果您需要刷新它,您可以调用更新所有属性的相同方法。
-
好的,谢谢。但是有没有什么办法不输入每个“get”,即使在 listview 中的 selectionchanged 之后?
-
我对 observablecollections 做的不多,但我猜 wpf 会在您每次单击或更改列表视图时检查值是否已更改。这导致了对 getter 的调用...
标签: c# wpf listview observablecollection