0

I have an issue trying to get XLabs autocompleteview to work, first try the search command would not get to the viewmodel, so I changed it to code behind, now it does go to the viewmodel and populates the model but the items are not showing on the view. The view

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="clr-namespace:XLabs.Forms.Controls;assembly=XLabs.Forms"
             x:Class="Tracking.Views.ScanPage"
             Title="{Binding PageTitle}">
    <ContentPage.Padding>
        <OnPlatform x:TypeArguments="Thickness"
                iOS="10, 20, 10, 10"
                Android="20, 20, 20, 20" />
    </ContentPage.Padding>
    <ContentPage.Resources>
        <ResourceDictionary>
            <DataTemplate x:Key="SugestionItemTemplate">
                <ViewCell Height="60">
                    <ViewCell.View>
                        <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                            <Label HorizontalOptions="Start"
                                           Text="{Binding Items.text}"
                                           VerticalOptions="Center" />
                        </StackLayout>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout VerticalOptions="FillAndExpand"
                 HorizontalOptions="FillAndExpand"
                 Orientation="Vertical"
                 Spacing="1">
            <Label HorizontalOptions="FillAndExpand" x:Name="Username" Text="{Binding user}" />
            <Label Text="Enter document # or scan barcode:" />
            <!-- Also had this but would not bind to viewmodel
            <controls:AutoCompleteView Placeholder="Enter document #..."
                                       HorizontalOptions="FillAndExpand"
                                       ShowSearchButton="False"
                                       SearchCommand="{Binding searchPrOnum}"
                                       SelectedCommand="{Binding selectItem}"
                                       Text="{Binding Item, Mode=TwoWay}"
                                       SuggestionBackgroundColor="White"
                                       SuggestionItemDataTemplate="{StaticResource SugestionItemTemplate}"
                                       Suggestions="{Binding Items, Mode=TwoWay}" /> -->
            <controls:AutoCompleteView Placeholder="Enter document #..."
                                       HorizontalOptions="FillAndExpand"
                                       ShowSearchButton="False"
                                       TextChanged="documentSearch_TextChanged"
                                       Text="{Binding Item, Mode=TwoWay}"
                                       SuggestionBackgroundColor="White"
                                       SuggestionItemDataTemplate="{StaticResource SugestionItemTemplate}"
                                       Suggestions="{Binding Items, Mode=TwoWay}" 
                                       x:Name="documentSearch"/>

            <Button x:Name="scanCode" Text="Scan Barcode" TextColor="White" BackgroundColor="#362C66" Command="{Binding Scanner}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

The code behind

public ScanPage() 
{
    InitializeComponent();

    BindingContext = new ScanPageModel();

}

private void documentSearch_TextChanged(object sender, TextChangedEventArgs e)
{
    var vm = new ScanPageModel();
    var val = documentSearch.Text;
    if (val.Length > 2)
        vm?.searchPrOnum(val);

}

The function in the viewmodel

public void searchPrOnum(string srch)
{
    if (srch.Length > 2)
    {
        if (isNumeric(srch))
        {
            Items.Clear();    

            string uri = App.apiurl + $"Productionorder/documentsearch/" + srch + "/";    

            using (var client = new HttpClient())
            {
                var response = client.GetAsync(uri);

                var items = JsonConvert.DeserializeObject<List<DocumentSearch>>(response.Result.Content.ReadAsStringAsync().Result);

                var list = (from i in items select new ComboBoxData { text = i.text, value = i.number }).Take(100).ToList();

                Items = new ObservableCollection<ComboBoxData>(list);
            }
        }
    }
    OnPropertyChanged("Items");
}
theshwaguy
  • 439
  • 1
  • 3
  • 14

1 Answers1

0

I found the issue, it isn't with the XLabs autocompleteview, it is the fact that I was calling the viewmodel from the code behind, once I changed the call to bind from the view I was able to update the model. The issue was the PropertyChangedEventHandler was always null and that would not update the model, I need to add a behavior on the Entry on text changed event to fire the commend to search for PrO.

theshwaguy
  • 439
  • 1
  • 3
  • 14