Я пытаюсь позвонить в службу wcf с помощью своего приложения silverlight, и у меня возникают некоторые проблемы с пониманием того, как модель возвращает результат обратно в модель представления.В моей модели представления у меня есть следующая команда:
public DelegateCommand GetSearchResultCommand
{
get
{
if (this._getSearchResultCommand == null)
this._getSearchResultCommand = new DelegateCommand(GetSearchResultCommandExecute, CanGetSearchResultsCommandExecute);
return this._getSearchResultCommand;
}
}
private void GetSearchResultCommandExecute(object parameter)
{
this.SearchResults = this._DataModel.GetSearchResults(this.SearchTerm);
}
/// <summary>
/// Bindable property for SearchResults
/// </summary>
public ObservableCollection<QueryResponse> SearchResults
{
get
{
return this._SearchResults;
}
private set
{
if (this._SearchResults == value)
return;
// Set the new value and notify
this._SearchResults = value;
this.NotifyPropertyChanged("SearchResults");
}
}
, затем в моей модели у меня есть следующий код
public ObservableCollection<QueryResponse> GetSearchResults(string searchQuery)
{
//return type cannot be void needs to be a collection
SearchClient sc = new SearchClient();
//******
//TODO: stubbed in placeholder for Endpoint Address used to retreive proxy address at runtime
// sc.Endpoint.Address = (clientProxy);
//******
sc.QueryCompleted += new EventHandler<QueryCompletedEventArgs>(sc_QueryCompleted);
sc.QueryAsync(new Query { QueryText = searchQuery });
return LastSearchResults;
}
void sc_QueryCompleted(object sender, QueryCompletedEventArgs e)
{
ObservableCollection<QueryResponse> results = new ObservableCollection<QueryResponse>();
results.Add(e.Result);
this.LastSearchResults = results;
}
Когда я вставляю точки останова в модель, я вижу, где находится запросвыполняется, и результат возвращается в модели (this.LastSearchResults = results), однако я не могу получить эту коллекцию для обновления / уведомления модели представления результата.Я сгенерировал и выполнил аналогичный тест, используя только метод и фиктивный класс, и он, кажется, работает, поэтому я подозреваю, что проблема связана с асинхронным вызовом / многопоточностью.У меня есть INotifyPropertyChanged в ViewModel для синхронизации View и ViewModel.Нужно ли также реализовывать INotifyPropChng внутри модели?Я новичок в mvvm, так что любая помощь / пример того, как мне следует подойти к этому, будет оценена.
Спасибо,
ОБНОВЛЕНИЕ В дальнейшем тестировании я добавил INotifyPropertyChanged вмодель и изменила событие «Завершено» следующим образом:
void sc_QueryCompleted(object sender, QueryCompletedEventArgs e)
{
ObservableCollection<QueryResponse> results = new ObservableCollection<QueryResponse>();
results.Add(e.Result);
//this.LastSearchResults = results;
SearchResults = results;
}
Размещение часов в результатах поиска Теперь я вижу, что они обновляются с результатами WCF.Мой вопрос все еще вокруг, это правильный подход?Кажется, это работает прямо сейчас, однако мне любопытно, если я что-то упускаю или мне не следует помещать INotify в Модель.
Спасибо,