Xamarin表单-无法更新选择器

时间:2019-10-23 17:21:49

标签: xamarin xamarin.forms

以下Xamarin Forms应用程序包含一个Picker和一个CollectionView控件,这些控件绑定到相同的List动物(ChickenCow)上。当我按下升级按钮时,动物应该升级到EagleElephant。动物已升级,但Picker不能反映变化。 CollectionView工作正常。

我在这里做错了什么?如果需要,可以在at Github上找到该项目的来源。

点击查看演示

Imgur

MainPage.xaml

    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:d="http://xamarin.com/schemas/2014/forms/design"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 mc:Ignorable="d"
                 x:Class="SampleApp.MainPage">

        <StackLayout Margin="0,100,0,0">
            <Button Text="Upgrade Animals" 
                    Margin="10"
                    HorizontalOptions="Center"
                    VerticalOptions="Start"
                    Command="{Binding Upgrade}" />
            <Picker ItemsSource="{Binding Animals}" />
            <CollectionView ItemsSource="{Binding Animals}" />
        </StackLayout>

    </ContentPage>

MainPageModel.cs

    public class MainPageModel : INotifyPropertyChanged
    {
        public MainPageModel()
        {
            _Animals = new List<string>() { "Chicken", "Cow" };
        }

        private List<string> _Animals;
        public List<string> Animals
        {
            get { return _Animals; }
            set
            {
                _Animals = value;

                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Animals"));
            }
        }

        public Command Upgrade
        {
            get
            {
                return new Command(_ =>
                {
                    Animals = new List<string>() { "Eagle", "Elephant" };
                });
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

更新

上面的代码正在运行XF 4.3.0.908675。我降级到4.2.0.778463,问题消失了。这可能是最新XF版本中引入的新错误。

2 个答案:

答案 0 :(得分:1)

该问题已在报告的频道上确认:Issue 8177,我已经尝试了Xamarin.Forms(4.4.0.991210-pre2)的预发布版本,该绑定现在在UWP上正常工作。

答案 1 :(得分:0)

我最近一直在处理类似的问题,它似乎确实是XF问题。

我通过不将列表设置为“ new List()”来解决此问题,而是创建了一个单独的列表,然后将其附加到绑定列表中。

在您的Command中,您应该尝试以下操作: List newList = new List(){“ Eagle”,“ Elephant”}; 动物= newList;

这可能不适用于您的示例,但这确实对我有用。