C# 为什么在提升PropertyChanged后,选择器(Xamarin.Forms)中的项目没有更新?

C# 为什么在提升PropertyChanged后,选择器(Xamarin.Forms)中的项目没有更新?,c#,xaml,mvvm,xamarin.forms,C#,Xaml,Mvvm,Xamarin.forms,我已经设置了一个选择器,这样每个项目都会通过一个转换器附加一个随机数来显示。我还添加了一个按钮,用于在列表上引发PropertyChanged事件,以便使用一组新的随机数显示这些项。但是,即使引发PropertyChanged事件,这些项似乎也没有更新 下面是带有选择器和按钮的XAML布局: 以下是转换器,它将随机数附加到给定值: public class MyConverter : IValueConverter { public object Convert(object value

我已经设置了一个选择器,这样每个项目都会通过一个转换器附加一个随机数来显示。我还添加了一个按钮,用于在列表上引发PropertyChanged事件,以便使用一组新的随机数显示这些项。但是,即使引发PropertyChanged事件,这些项似乎也没有更新

下面是带有选择器和按钮的XAML布局:

以下是转换器,它将随机数附加到给定值:

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var random = new Random();
        return $"{value} {random.Next(100)}";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

当页面第一次显示时,一切正常:MyList中的每一项都会显示一个随机数。但是,当我单击刷新按钮(这会引发MyList的PropertyChanged事件)时,我验证了这一点,不会重新计算选择器中的项。我希望出现新的随机数,但它与以前的数字相同,换句话说,什么也没有发生。

您必须重置选择器的项目源,如:

RefreshCommand = new Command( async () =>
{
    ObservableCollection<MyEnum> list = MyList;
    MyList = null;
    await Task.Delay(10);
    MyList = list;
});

它将再次触发转换器以重新格式化随机值。

这可以工作,谢谢。但我觉得这有点像黑客。我认为,当在数据绑定列表上引发PropertyChanged时,选择器应该做正确的事情并刷新。作为补充说明,我必须做类似的事情来保持SelectedItem不显示在原始问题中,因为它在将MyList设置为null后丢失。
public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var random = new Random();
        return $"{value} {random.Next(100)}";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
RefreshCommand = new Command( async () =>
{
    ObservableCollection<MyEnum> list = MyList;
    MyList = null;
    await Task.Delay(10);
    MyList = list;
});