2015-07-26 3 views
0

Я изучаю MVVM Light и приложение, над которым я работаю, имеет функции поиска имен событий. Вот мои коды для фильтрации ListBox, когда пользователь вводит в TextBox. Ошибка: Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<NGO_Volunteer_Comm_Platform_v1._0.DataModel.Event>' to 'System.Collections.Generic.List<NGO_Volunteer_Comm_Platform_v1._0.DataModel.Event>'. An explicit conversion exists (are you missing a cast?)Ошибка Явное преобразование существует C#, MVVM Light - LINQ

ViewModel коды:

private static ObservableCollection<Event> _searchEventCollection = new ObservableCollection<Event>(); 

public static ObservableCollection<Event> SearchEventCollection 
{ 
    get { return _searchEventCollection; } 
    set { _searchEventCollection = value; } 
} 

//search from homepage event section 
private RelayCommand _eventSearch; 
/// <summary> 
/// Gets the EventSearch. 
/// </summary> 
public RelayCommand EventSearch 
{ 
    get 
    { 
     return _eventSearch 
      ?? (_eventSearch = new RelayCommand(
      async() => 
      { 
       SearchEventCollection.Clear(); 
       var eventList = await App.MobileService.GetTable<Event>().ToListAsync(); 

       foreach (Event ename in eventList) 
       { 
        SearchEventCollection.Add(new Event 
        { 
         Id = ename.Id, 
         EventName = ename.EventName, 
         Date = ename.Date, 
         Location = ename.Location, 
         Desc = ename.Desc 
        }); 
       } 
      })); 
    } 
} 

private string filter; 
public String Filter 
{ 
    get 
    { 
     return this.filter; 
    } 
    set 
    { 
     this.filter = value; 
     RaisePropertyChanged("SearchEventCollection"); 
    } 
} 
public List<Event> FilteredNames 
{ 
    get 
    { 
     return (from name in SearchEventCollection where name.EventName.StartsWith(filter) select name); 
    } 
}   

public searchfromhomepageViewModel() 
{ 
    filter = ""; 
} 

Как решить эту ошибку?

ответ

2

Используйте метод ToList расширения для создания List<T> из IEnumerable<T>:

public List<Event> FilteredNames 
{ 
    get 
    { 
     return (from name in SearchEventCollection where name.EventName.StartsWith(filter) select name).ToList(); 
    } 
} 

Или изменить тип FilteredNames собственности IEnumerable<Event>. На самом деле, это, наверное, лучшая идея. В общем, вы не должны публично публиковать конкретные типы коллекций, потому что вы не можете возвращать экземпляр другого типа, если вам нужно его позже изменить. Кроме того, возвращение List<T>, по-видимому, означает, что вы можете изменить список. Но так как новый список возвращается каждый раз при вызове свойства, его изменение не повлияет на свойство, поэтому оно вводит в заблуждение.

+0

Мне просто пришлось добавить ToUpper(), и он отлично работает – user3411961

 Смежные вопросы

  • Нет связанных вопросов^_^