C# 为什么在提升PropertyChanged后,选择器(Xamarin.Forms)中的项目没有更新?
我已经设置了一个选择器,这样每个项目都会通过一个转换器附加一个随机数来显示。我还添加了一个按钮,用于在列表上引发PropertyChanged事件,以便使用一组新的随机数显示这些项。但是,即使引发PropertyChanged事件,这些项似乎也没有更新 下面是带有选择器和按钮的XAML布局: 以下是转换器,它将随机数附加到给定值: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
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;
});