2016-01-04 4 views
2

У меня возникли трудности с заполнением и отображением списка предложений XLabs.Forms.Control: AutoCompleteView. Я уже привязал наблюдаемую коллекцию в ViewModel к свойству предложений для autocompleteview xaml.Список предложений о включении xlabs Autocomplete view

В соответствии с моим кодом отладки (то есть просто циклом, который записывает содержимое, возвращаемое запросом на вывод отладки), мои запросы возвращают элементы, поэтому я думаю, что проблема заключается в том, чтобы просто показывать указанные элементы.

Вот код Xaml и ViewModel (класс магазина имеет StoreName свойство/поле)

XAML

<ContentPage.Resources> 
     <ResourceDictionary> 
      <DataTemplate x:Key="SugestionItemTemplate"> 
        <ViewCell Height="60"> 
          <ViewCell.View> 
           <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> 
             <Label Text="{Binding StoreName}" VerticalOptions="Center" HorizontalOptions="Start" /> 
           </StackLayout> 
          </ViewCell.View> 
         </ViewCell> 
      </DataTemplate> 
     </ResourceDictionary> 
    </ContentPage.Resources> 
    <StackLayout HorizontalOptions="Center" Spacing="10"> 
    <StackLayout.BindingContext> 
     <vm:CreateSaleViewModel /> 
    </StackLayout.BindingContext> 
    <Label Text="Store" /> 
    <controls:AutoCompleteView Placeholder="Type a store" 
           SuggestionItemDataTemplate="{StaticResource SugestionItemTemplate}" 
           Text="{Binding StoreQuery}" 
           ShowSearchButton="True" 
           SearchBackgroundColor = "White" 
           SearchCommand ="{Binding SearchCmd}" 
           Suggestions="{Binding StoreSuggestions}" /> 
    </StackLayout> 

ViewModel

class CreateSaleViewModel 
    { 
     // Query Variables 
     public string StoreQuery { get; set; } 

     // Query Suggestions 
     public ObservableCollection<Store> StoreSuggestions { get; private set; } 

     public ICommand SearchCmd { get; set; } 

     public CreateSaleViewModel() 
     { 
      SearchCmd = new Command(Search); 
     } 

     private async void Search() 
     { 
      StoreSuggestions = await App.AzureDataStore.SearchStoresAsync(StoreQuery); 
     } 
    } 
+0

Вы нашли решение для этого? Я также ищу решение. спасибо – batmaci

+0

Я только что узнал, что здесь предложения отсутствуют "{Binding StoreSuggestions}" /> Mode = Twoway. Это должно быть так, что предложения = "{Binding StoreSuggestions, Mode = TwoWay}" – batmaci

+0

еще не пробовал ответ Майкла Дэвиса. Наша команда решила использовать другую технологию вместо xamarin.forms – osse

ответ

1

Я просто побежал в то же самое. Я решил это, полностью проигнорировав команду поиска, и подключился к событию AutoCompleteView TextChanged в коде.

XAML

<controls:AutoCompleteView 
     x:Name="MyAutoComplete" 
         SuggestionItemDataTemplate="{StaticResource SuggestionItemTemplate}" 
         Placeholder="Type Product Here" 
         ShowSearchButton="True" 
         SearchBackgroundColor="White" 
         SearchTextColor = "Black" 
         SearchBorderColor = "Yellow" 
         SuggestionBackgroundColor="White" 
         SearchCommand="{Binding SearchCommand}" 
         Suggestions="{Binding Items, Mode=TwoWay}" 
         SelectedItem ="{Binding SelectedItem}" 
         SelectedCommand = "{Binding CellSelectedCommand}"/> 

Код За

public AddStockItem() 
{ 
    BindingContext = Model; 
    InitializeComponent(); 
    MyAutoComplete.TextChanged += MyAutoComplete_TextChanged; 
} 
async void MyAutoComplete_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    await Model.LoadProducts(e.NewTextValue); 
} 

Посмотреть модели Поиск ICommand ничего не делает на всех

public Command<string> SearchCommand 
    { 
     get 
     { 
      return _searchCommand ?? (_searchCommand = new Command<string>(
       obj =>{}, 
       obj => !string.IsNullOrEmpty(obj.ToString()))); 
     } 
    } 

ViewModel LoadProducts Обновляет ObservableCollection после сетевого вызова.

public async Task LoadProducts(string term) 
    { 
     var items = await service.GetProducts(term); 
     Items=new ObservableCollection<string>(items); 
     OnPropertyChanged("Items"); 

    } 
+0

Знаете ли вы, почему SearchCommand не запускает вместо события textchange? зачем это? – batmaci

+0

Что такое «Модель»? –