Вид:
<Picker ItemsSource = "{Binding ECCLevels}"
ItemDisplayBinding = "{Binding QRCodeGenerator.ECCLevel}"
HeightRequest = "44"/>
ViewModel:
public ObservableCollection<QRCodeGenerator.ECCLevel> ECCLevels { get; set; } = new ObservableCollection<QRCodeGenerator.ECCLevel>();
ECCLevels = new ObservableCollection<QRCodeGenerator.ECCLevel>(Enum.GetValues(typeof(QRCodeGenerator.ECCLevel)).OfType<QRCodeGenerator.ECCLevel>().ToList());
Я упростил приведенный выше код. ObservableCollection заполняется данными после второй строки кода. Но проблема в том, что я не знаю, что добавить в свойство ItemDisplayBinding средства выбора, поскольку там Enum преобразуется в список напрямую, без прохождения модели.
Спасибо @GeraldVersluis. Оно работает. Но откуда вы узнали? Я не могу найти никакой документации, в которой упоминалось бы об этом.
Создал ответ, рад быть полезным!
{Binding.} - это просто сокращение для прямой привязки к объекту bindingcontext без пути, вы также можете просто использовать {Binding}
Да, @BenReierson, тоже работает. Спасибо!
Вы можете просто использовать ItemDisplayBinding = "{Binding .}"
, точечная запись означает, что вы в основном ссылаетесь на this
. Таким образом, вы просто ссылаетесь на сам объект, а не на какое-либо другое свойство.
В комментариях вы спросили меня, откуда я знаю, что это действительно отличный вопрос. Я думаю, что поднял его еще в WPF. Но в документации тяжело раскопаться, здесь я нашла небольшую заметку: https://docs.microsoft.com/en-us/dotnet/api/system.windows.data.binding.path?redirectedfrom=MSDN&view=netframework-4.7.2#System_Windows_Data_Binding_Path
Optionally, a period (.) path can be used to bind to the current source. For example,
Text = "{Binding}"
is equivalent toText = "{Binding Path=.}"
.
Мне нужно RaisePropertyChange для ObservableCollection ... Это нормальное поведение?
Наверное просто:
ItemDisplayBinding = "{Binding .}"
?