简体   繁体   English

Xamarin Forms - 未检测到更改

[英]Xamarin Forms - Changes aren't detected

I've been trying to make a Custom search field that, on the fly, should add objects to a list when typing.我一直在尝试制作一个自定义搜索字段,它应该在输入时动态地将对象添加到列表中。 But for some reason it only shows the list with an item when i hot reload.但由于某种原因,它只在我热重新加载时显示带有项目的列表。

CreateHerdPageViewModel创建牧群页面视图模型

   public class CreateHerdPageViewModel : ViewModelBase
    {
        private IHerdService herdService;
        private string searchInput;
        public string SearchInput { get => searchInput; 
            set { 
                SetProperty(ref searchInput, value);
                RaisePropertyChanged(nameof(HerdSearchResults));
            } 
        }

        private List<Herd> herdSearchResults;
        public List<Herd> HerdSearchResults
        {
            get => herdSearchResults;

            set {
                SetProperty(ref herdSearchResults, value);
                }
        }

        private List<Herd> allHerds;
        public List<Herd> AllHerds { get => allHerds; set => SetProperty(ref allHerds, value); }

        public DelegateCommand SearchChrOrAddressCommand { get; set; }
        public CreateHerdPageViewModel(INavigationService navigationService, IHerdService herdService)
            : base(navigationService)
        {
            this.herdService = herdService;
            SearchChrOrAddressCommand = new DelegateCommand(SearchChrOrAddress);
        }
        private void SearchChrOrAddress()
        {
            Herd herdMatch = new Herd();
            for (int i = 0; i < AllHerds.Count; i++)
            {
                herdMatch = AllHerds[i];
            }
            if (herdMatch.ChrAddress.Area.Contains(SearchInput))
            {
                if (HerdSearchResults.Contains(herdMatch) == false)
                {
                    HerdSearchResults.Add(herdMatch);
                    RaisePropertyChanged(nameof(HerdSearchResults));
                } 
            }
            
        }
        public async override void OnNavigatedTo(INavigationParameters parameters)
        {
            base.OnNavigatedTo(parameters);
            AllHerds = await herdService.GetHerds();
            HerdSearchResults = new List<Herd>();
        }


    }
}

CreateHerdPage.Xaml创建HerdPage.Xaml

xmlns:yummy="clr-namespace:Xamarin.Forms.PancakeView;assembly=Xamarin.Forms.PancakeView"
xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
xmlns:CustomRenderer="clr-namespace:ChrApp.CustomRenderer">

                   <yummy:PancakeView
                        Grid.Column="0"
                        Grid.Row="0"
                        Grid.ColumnSpan="3"
                        CornerRadius="10">
                    <CustomRenderer:NoUnderlineEntry
                            x:Name="SearchField"
                            Style="{StaticResource UpdateEntry}"
                            Margin="0"
                            TextChanged="RemovceSearchIcon"
                            Text="{Binding SearchInput}">
                        <CustomRenderer:NoUnderlineEntry.Behaviors>
                            <b:EventToCommandBehavior
                                EventName="TextChanged"
                                Command="{Binding SearchChrOrAddressCommand}"/>
                        </CustomRenderer:NoUnderlineEntry.Behaviors>
                    </CustomRenderer:NoUnderlineEntry>
                </yummy:PancakeView>

As you can see, i've tried different approaches to make it recognize changes, but without luck.如您所见,我尝试了不同的方法来使其识别更改,但没有运气。

Can someone enlighten me on what i'm missing?有人可以启发我了解我所缺少的吗?

Thanks in advance提前致谢

So the issue was that I used an ordinary List , and not an ObservableCollection .所以问题是我使用了一个普通的List而不是ObservableCollection So swithcing to this solved the issue.所以切换到这个解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM