У меня есть ComboBox
со свойством Items
, связанным с коллекцией объектов.У меня также есть свойство SelectedItem
, связанное со всей коллекцией, с ValueConverter
, предназначенным для проверки элементов в коллекции и возврата 1 элемента, который будет выбран.Эта часть работает.
Что не работает, так это когда пользователь делает изменение выбора в ComboBox, метод ConvertBack(...)
для ValueConverter
не вызывается.Мне нужно вызвать ConvertBack(...)
, потому что мне нужно принять выбор пользователя, пересмотреть коллекцию и соответственно отредактировать старый выбранный элемент и новый выбранный элемент.
Я знаю, что этот подход неудобен, но этотак оно и есть.Вот соответствующий код:
ComboBox:
<ComboBox ItemsSource="{Binding}" SelectedItem="{Binding Path=., Converter={StaticResource ResourceKey=DataInputAssetChoiceSelectedItemConverter}}" />
ValueConverter:
public class DataInputAssetChoiceSelectedItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
foreach (CustomObject Choice in (Collection<CustomObject>)value)
{
if (Choice.IsSelected)
{
return Choice;
}
}
return ((Collection<CustomObject>)value).First();
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{ //breakpoint...execution never gets here!
return null;
}
}
Так почему же никогда не вызывается ConvertBack(...)
?Это просто то, что я неправильно понимаю по поводу ComboBox
?Я попробовал этот подход, используя SelectedItem
, SelectedValue
, SelectedIndex
, и пытался связываться с UpdateSourceTrigger
, различными режимами привязки, DataTriggers, и, кажется, никогда не получаю ConvertBack(...)
для вызова.Является ли использование события SelectionChanged
единственным вариантом?Если так, то почему?