从datalayer获取数据到View中的observablecollection

时间:2015-07-08 08:07:09

标签: c# wpf mvvm observablecollection

我从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时调用该方法。 我怎样才能做到这一点?在编码方面,我真是个新手。

1 个答案:

答案 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;
   }       
}