Вот что я думаю: -
Я предполагаю, что ItemSource - это простая коллекция значений пустых строк (то есть не инкапсулированных в другом классе). При нажатии кнопки мыши на объекте программный код копирует ссылку на объект элемента в коллекции в поле SelectedItem списка.
поэтому, если коллекция: - "Fred", null, "Jane", "Mary" и вы нажимаете мышь на "Fred", тогда ссылка на объект "Fred" копируется в SelectedItem. Если вы нажмете на второй элемент, ссылка на этот объект (ноль) будет скопирована в SelectedItem.
Проблема в том, что значение NULL в SelectedItem фактически означает особый случай, когда ни один элемент не выбран.
Вы не скопируете "None" в SelectedItem, даже если оно указано в вашем атрибуте TargetNullValue. Это просто визуальное представление, когда элемент коллекции содержит значение NULL. Поле списка интересует только ссылки на объекты коллекции, а не то, что отображается в пользовательском интерфейсе.
Одним из способов решения этой проблемы является создание ненулевой коллекции объектов со строковым полем с именем «name».
, например
class People
{
string Name {get;set;}
}
...
...
var list = new List<People> {new People {Name = "Fred"},
new People {Name = null},
new People {Name = "Jane"},
};
Это будет означать, что ни один элемент в списке не будет иметь значение NULL.
Затем в Binding of DataTemplate используйте: -
Text="{Binding Path=Name, TargetNullValue=None}"
SelectedItem для каждого элемента теперь будет отличным от NULL, даже если имя равно NULL, но недостатком для вас является то, что SelectedItem больше не является строкой выбранного имени, а является ссылкой на выбранный объект People. .