更新模型后,XLabs autocompleteview不显示结果

时间:2017-10-18 13:52:37

标签: c# xamarin viewmodel xlabs

我有一个问题试图让XLabs autocompleteview工作,首先尝试搜索命令无法访问viewmodel,所以我将其更改为代码后面,现在它确实转到viewmodel并填充模型,但项目是没有在视图上显示。 视图

<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>

背后的代码

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);

}

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");
}

1 个答案:

答案 0 :(得分:0)

我发现了问题,它不是XLabs自动完成视图,事实上我从后面的代码调用了viewmodel,一旦我从视图中更改了调用bind,我就能够更新模型。问题是PropertyChangedEventHandler总是为null并且不会更新模型,我需要在文本更改事件的条目上添加一个行为来触发推荐以搜索PrO。