0

我在尝试让 XLabs 自动完成视图工作时遇到问题,首先尝试搜索命令不会到达视图模型,所以我将其更改为代码后面,现在它确实进入了视图模型并填充了模型,但项目没有显示在风景。风景

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

}

视图模型中的函数

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

1 回答 1

0

我发现了问题,不是 XLabs 自动完成视图,而是我从后面的代码调用视图模型,一旦我从视图更改了对绑定的调用,我就能够更新模型。问题是 PropertyChangedEventHandler 始终为空并且不会更新模型,我需要在 Entry on text changed 事件上添加一个行为来触发推荐以搜索 PrO。

于 2017-10-18T19:38:26.433 回答