У меня есть treeview, к которому я добавил поведение, которое позволяет мне привязываться к выбранному в данный момент элементу (свойство зависимости, которое я назвал SelectedCourse). Это работает очень хорошо, так как я могу приостановить программу и подтвердить, что значение выбранного элемента меняется:
Вот привязка XAML:
<TextBox TextWrapping="Wrap"
Text="{Binding SelectedCourse.Description}">
</TextBox>
И, как вы видите, ничего не происходит в пользовательском интерфейсе, когда SelectedCourse обновляется:
(Красным полем справа является текстовое поле. Красный контур происходит от Snoop.)
BindableCourse наследует от DependencyObject, а описание - свойство зависимостей:
public class BindableCourse : DependencyObject
{
public static DependencyProperty DescriptionProperty = DependencyProperty.Register(
"Description",
typeof(string),
typeof(BindableCourse));
public string Description
{
get { return (string)GetValue(DescriptionProperty); }
set { SetValue(DescriptionProperty, value); }
}
}
Теперь, если я посмотрю элемент текстового поля в Snoop, SelectedCourse.Description появится в текстовом поле по желанию.
После этого я не могу изменить текстовое поле; даже с помощью, например, изменения SelectedCourse - и я проверил, и SelectedCourse меняет, когда я выбираю новый элемент, а затем закрываю Snoop, повторно открывая его и затем пересматривая текстовое поле.
wtf продолжается?
Вместо использования собственного пользовательского связывания, я думаю, вы можете сделать что-то вроде следующего:
<TextBox TextWrapping="Wrap"
Text="{Binding ElementName=TreeViewName, Path=SelectedValue.Description}">
</TextBox>
Выбранное значение изменится в зависимости от выбора дерева. "TreeViewName" - это имя вашего дерева, используя атрибут x: Name.
TextBox.Text
связывает два пути по умолчанию, поэтому возможно, что описание выбранного курса изменяется. Попробуйте добавитьMode=OneWay
к вашей привязке и посмотрите,Mode=OneWay
ли это какое-либо влияние. Предполагая, что вы не хотите, чтобы пользователь мог изменять описание, вы также должны установитьIsReadOnly="True"
вTextBox
.