从数据层获取数据到View中的observablecollection
get data from datalayer into observablecollection in View
我从 DataLayer Class 获取数据到 ViewModel,但它没有进入与视图中的列表框绑定的 observableCollection。
public class ViewModel : NotifyUIBase
{
public ViewModel()
{
FindImageCommand = new RelayCommand(FindImage);
}
public ObservableCollection<Image> FindVisualReferences { get; set; }
public RelayCommand FindImageCommand { get; private set; }
private void FindImage()
{
string SearchTerm = this.SearchBox;
var dbFunctions = new DatabaseFunctions();
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
}
}
我已经测试了 FindVisualReferecences(SearchTerm)
方法,它提供了填充 observableCollection 所需的项目。
我还测试了 View 的数据绑定,效果不错。
当我将方法放入构造函数时,ObservableCollection 被填充
public ViewModel()
{
var dbFunctions = new DatabaseFunctions();
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
}
但我需要在用户给出 FindImageCommand 时调用该方法。
我怎样才能使这项工作?说到编码,我真的是个菜鸟。
您的问题是您使用 ObservableCollection 的新实例设置 FindVisualReference 属性,而不是在现有实例中添加和删除。
public ObservableCollection<Image> FindVisualReferences { get; set; }
private void FindImage()
{
string SearchTerm = this.SearchBox;
var dbFunctions = new DatabaseFunctions();
FindVisualReferences.Clear();
FindVisualReferences.AddRange(dbFunctions.FindVisualReferences(SearchTerm));
}
或者您也可以像您所做的那样设置 属性
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
但为了使其正常工作,您必须引发 PropertyChanged 事件。
private ObservableCollection<Image> _findVisualReferences;
public ObservableCollection<Image> FindVisualReferences
{
get{ return _findVisualReferences;}
set
{
_findVisualReferences = value;
RaiseProperyChanged("FindVisualReferences");
}
}
但是,如果您这样做,那么使用 ObservableCollection 并没有多大意义,所以只需使用 List 即可。
我的建议是,将其设置为只读 属性(即仅 getter)并添加到其中。
private ObservableCollection<Image> _findVisualReferences;
public ObservableCollection<Image> FindVisualReferences
{
get
{
if(_findVisualReferences == null)
_findVisualReferences = new ObservableCollection<Image>();
return _findVisualReferences;
}
}
我从 DataLayer Class 获取数据到 ViewModel,但它没有进入与视图中的列表框绑定的 observableCollection。
public class ViewModel : NotifyUIBase
{
public ViewModel()
{
FindImageCommand = new RelayCommand(FindImage);
}
public ObservableCollection<Image> FindVisualReferences { get; set; }
public RelayCommand FindImageCommand { get; private set; }
private void FindImage()
{
string SearchTerm = this.SearchBox;
var dbFunctions = new DatabaseFunctions();
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
}
}
我已经测试了 FindVisualReferecences(SearchTerm)
方法,它提供了填充 observableCollection 所需的项目。
我还测试了 View 的数据绑定,效果不错。
当我将方法放入构造函数时,ObservableCollection 被填充
public ViewModel()
{
var dbFunctions = new DatabaseFunctions();
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
}
但我需要在用户给出 FindImageCommand 时调用该方法。 我怎样才能使这项工作?说到编码,我真的是个菜鸟。
您的问题是您使用 ObservableCollection 的新实例设置 FindVisualReference 属性,而不是在现有实例中添加和删除。
public ObservableCollection<Image> FindVisualReferences { get; set; }
private void FindImage()
{
string SearchTerm = this.SearchBox;
var dbFunctions = new DatabaseFunctions();
FindVisualReferences.Clear();
FindVisualReferences.AddRange(dbFunctions.FindVisualReferences(SearchTerm));
}
或者您也可以像您所做的那样设置 属性
FindVisualReferences = dbFunctions.FindVisualReferences(SearchTerm);
但为了使其正常工作,您必须引发 PropertyChanged 事件。
private ObservableCollection<Image> _findVisualReferences;
public ObservableCollection<Image> FindVisualReferences
{
get{ return _findVisualReferences;}
set
{
_findVisualReferences = value;
RaiseProperyChanged("FindVisualReferences");
}
}
但是,如果您这样做,那么使用 ObservableCollection 并没有多大意义,所以只需使用 List 即可。
我的建议是,将其设置为只读 属性(即仅 getter)并添加到其中。
private ObservableCollection<Image> _findVisualReferences;
public ObservableCollection<Image> FindVisualReferences
{
get
{
if(_findVisualReferences == null)
_findVisualReferences = new ObservableCollection<Image>();
return _findVisualReferences;
}
}