我有一个问题试图让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");
}
答案 0 :(得分:0)
我发现了问题,它不是XLabs自动完成视图,事实上我从后面的代码调用了viewmodel,一旦我从视图中更改了调用bind,我就能够更新模型。问题是PropertyChangedEventHandler总是为null并且不会更新模型,我需要在文本更改事件的条目上添加一个行为来触发推荐以搜索PrO。