我从DataLayer类中获取数据到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时调用该方法。 我怎样才能做到这一点?在编码方面,我真是个新手。
答案 0 :(得分:0)
您的问题是您使用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;
}
}