Краткий ответ
Заменить
SelectedValuePath="{Binding /Length}"
с
SelectedValuePath="Length"
Длинный ответ
SelectedValuePath - это строка, которая указывает путь от объекта к выбранному значению. Написав SelectedValuePath="{Binding /Length}"
, вы связываете SelectedValuePath (не SeletedValue ) со свойством «Длина» выбранного элемента, поэтому, если длина выбранного элемента равна 3, тогда значение свойство SelectedValuePath устанавливается в строку «3». Затем WPF пытается вычислить SelectedValue , найдя в строке свойство с именем «3». Поскольку строковый объект не имеет свойства с именем «3», вы получите ошибку.
Вы можете подумать, что SelectedValue={Binding /Length}"
сделает свое дело, и действительно, оно действительно выражает концепцию того, что вы на самом деле пытаетесь сделать. Но на самом деле это не работает, потому что Selector
имеет код, который перезаписывает SelectedValue
всякий раз, когда SelectedItem
изменяется.
Другой способ взглянуть на это состоит в том, что установка SelecteValuePath
в значение «abcd» фактически эквивалентна установке SelectedValue
в "{Binding /abcd}"
(но только если IsSynchronizedWithCurrentItem = "true").