У меня есть текстовое поле, которое содержит строку, которая должна быть привязана только тогда, когда пользователь нажимает кнопку. В XAML:
<Button Command="{Binding Path=PingCommand}" Click="Button_Click">Go</Button>
<TextBox x:Name="txtUrl" Text="{Binding Path=Url,UpdateSourceTrigger=Explicit, Mode=OneWay}" />
В коде:
private void Button_Click(object sender, RoutedEventArgs e)
{
BindingExpression be = this.txtUrl.GetBindingExpression(TextBox.TextProperty);
be.UpdateTarget();
}
"be" всегда равно NULL. Почему?
Update:
Хорошо, вот некоторые обновления после многих попыток.
IF, я устанавливаю режим OneWay с явным обновлением. У меня есть исключение NullReferenceException в объекте be be из выражения GetBindingExpression.
ЕСЛИ, я устанавливаю режим на ничего (по умолчанию TwoWay) с явным обновлением. У меня есть привязка, получающая значение (string.empty), и каждый раз стирает все в текстовом поле.
IF, я устанавливаю режим OneWay с PropertyChanged. Я ничего не вызвал связанным с ним свойством, когда я нажимаю клавиши в текстовом поле, и как только я нажимаю кнопку, у меня есть исключение NULLReferenceException в объекте be be.
IF, я устанавливаю режим в ничто (по умолчанию TwoWay), с PropertyChanged У меня есть свойство, которое поднимается каждый раз, когда я нажимаю (GOOD), но я не хочу, чтобы изменение свойства каждый раз, когда пользователь нажимал клавишу... но только когда пользователь нажимает кнопку.
Хорошо, подумав немного больше, я заметил, что:
BindingExpression be = this.txtUrl.GetBindingExpression(TextBox.TextProperty);
be.UpdateTarget();
Имеет что-то нелогичное, потому что я не хочу обновлять Target, но источник. Я просто изменил be.Updatetarget(), чтобы be.UpdateSource(); и все это с XAML:
<TextBox x:Name="txtUrl" Text="{Binding Path=Url, UpdateSourceTrigger=Explicit}">...
Спасибо всем, кто помог мне в решении этой проблемы. Я добавил +1 всем! Благодаря
Вы пробовали привязку данных без UpdateSourceTrigger? Если привязка не удалась, я ожидал бы, что null будет результатом GetBindingExpression.
Одной из причин этого может быть то, что Url
не был реализован как DependencyProperty.
Он должен работать, может быть, вы вызываете функции, которые удаляют привязку перед строками, которые вы предоставляете в обработчике событий? Присвоение значения текстовому свойству текстового поля удалит привязку