У меня возникли проблемы с редактируемым ComboBox и обновлением привязки. В настоящее время у меня есть ComboBox, где UpdateSourceTrigger = LostFocus это потому, что мне нужно дождаться, когда пользователь закончит ввод somthing, прежде чем я решите, является ли значение новым значением (и тем самым создает новый).Обновление привязки Force после завершения выбора ComboBox MVVM
К сожалению, у меня есть еще одна функция, которая требует привязки для обновления при изменении значения. Aka, LostFocus в этом случае не годится. Выбрав новое значение в ComboBox, оно не приводит к потере функции LostFocus (очевидно). Поэтому мне нужно найти способ принудительно обновить привязку.
Я посмотрел в SelectionChanged и заставляя обновления на связывании:
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ParentConversation.ViewModel.ComboSelectionChanged}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type controls:StoryForgeComboBox}}}"/>
</i:EventTrigger>
и обновление привязки в код следующим образом:
be = BindingOperations.GetBindingExpression(ele, ComboBox.TextProperty);
if (be != null)
{
be.UpdateSource();
}
К сожалению, я CAN NOT обновление связывания на данный момент, поскольку значение еще не изменилось. См. Эту статью в разделе stackoverflow: ComboBox- SelectionChanged event has old value, not new value
Существует трюк, в котором вы можете использовать событие DropDownClosed, а затем обновлять привязку, это работает, но не работает, если вы используете клавиши со стрелками вверх/вниз, которые никогда не открывают ComboBox. Также подключиться к KeyUp и KeyDown слишком рано. Невозможно обновить привязку.
Так что мой вопрос в том, когда самое время сказать: «Привет, комбо-бокс, теперь вы можете обновить свои привязки».
Cheers.
«Итак, мне нужно найти способ принудительно обновить привязку» - чего именно вы хотите достичь? В MVVM ViewModel реализуется ['INotifyPropertyChanged'] (http://msdn.microsoft.com/en-us/library/ms743695.aspx), так что обновление из источника происходит неявно, если вы изменяете значение свойства (или явно, если вы поднимаете событие) и в другом направлении, в источник, это (как вы говорите) 'UpdateSourceTrigger = ValueChanged'. Какая из ваших проблем? – Sinatr