Я настроил Picker
, чтобы каждый элемент отображался со случайным числом, добавленным к нему (через конвертер). Я также добавил кнопку, которая вызывает событие PropertyChanged
в списке, чтобы элементы отображались с новым набором случайных чисел. Однако, хотя событие PropertyChanged
возникает, элементы не обновляются.
Вот макет XAML с Picker
и Button
:
<StackLayout>
<Picker
ItemsSource="{Binding MyList}"
ItemDisplayBinding="{Binding ., Converter={StaticResource MyConverter}}"
/>
<Button
Command="{Binding RefreshCommand}"
Text="Refresh"
/>
</StackLayout>
Вот модель представления, которая содержит MyList
и RefreshCommand
. RefreshCommand
вызывает событие PropertyChanged
для MyList
(через ViewModelBase
, который является частью MVVM Light Toolkit):
public class MainViewModel : ViewModelBase
{
private ObservableCollection<MyEnum> _myList;
public ObservableCollection<MyEnum> MyList
{
get => _myList;
set => Set(ref _myList, value);
}
public ICommand RefreshCommand =>
new RelayCommand(() => RaisePropertyChanged(nameof(MyList)));
}
public enum MyEnum
{
One, Two, Three, Four, Five
}
Вот преобразователь, который добавляет случайное число к заданному значению:
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
отображается со случайным числом, добавленным к нему. Однако, когда я нажимаю кнопку «Обновить», которая вызывает событие PropertyChanged
для MyList
(я это подтвердил), элементы в Picker
не переоцениваются. Я ожидал появления новых случайных чисел, но это те же числа, что и раньше (другими словами, ничего не происходит).