Требуется TextBox в шаблоне данных ListView для вызова набора либо LostFocus, либо клавиши ввода. Используется UpdateSourceTrigger = Явный и события для LostFocus и KeyUp. Проблема в том, что я не могу получить действительную ссылку на BindingExpression.
XAML
<ListView x:Name="lvMVitems" ItemsSource="{Binding Path=DF.DocFieldStringMVitemValues, Mode=OneWay}">
<ListView.View>
<GridView>
<GridViewColumn x:Name="gvcExistingValue">
<GridViewColumnHeader Content="Value"/>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="tbExistingValue"
Text="{Binding Path=FieldItemValue, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}"
Validation.Error="Validataion_Error"
LostFocus="tbExistingValue_LostFocus" KeyUp="tbExistingValue_KeyUp" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Код позади НЕ работает
private void tbExistingValue_LostFocus(object sender, RoutedEventArgs e)
{
BindingExpression be = lvMVitems.GetBindingExpression(ListView.SelectedItemProperty);
be.UpdateSource();
}
быть нулевым. Я пробовал ListView.SelectedValueProperty и ListView.SelectedPathProperty. Если он попытается выполнить tbExistingValue, то произойдет сбой с сообщением «не существует» и даже не скомпилируется. Как мне получить правильное BindingExpression ?? Спасибо.
Если я установлю UpdateSourceTrigger = LostFocus и удаляю обработчики событий, которые он вызывает, они устанавливаются правильно Там есть действующая двухсторонняя привязка. Я просто не могу получить действительную ссылку на BindingExpression (be), используя явное.
Отлично работает для TextBox прямо на странице (в ячейке сетки). Xaml ниже работает:
<TextBox Grid.Row="1" Grid.Column="1" x:Name="strAddRow"
Text="{Binding Path=DF.NewFieldValue, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True, UpdateSourceTrigger=Explicit}"
Validation.Error="Validataion_Error"
LostFocus="strAddRow_LostFocus" KeyUp="strAddRow_KeyUp"/>
Это BindingExpression работает нормально:
private void strAddRow_LostFocus(object sender, RoutedEventArgs e)
{
BindingExpression be = strAddRow.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
}