Привязка к DataContext Failing - PullRequest
       1

Привязка к DataContext Failing

0 голосов
/ 02 апреля 2019

У меня есть окно wpf, которое отображает задачи.Пользователь щелкает задачу в элементе управления TreeView, а затем другие элементы управления (TextBox, ComboBox и т. Д.) Отображают различные свойства выбранной задачи.Я реализовал это следующим образом:

1) TreeView оцифровывается с помощью:

ItemsSource="{Binding Source={StaticResource cvsTasks}}"

2) DataContext для окна задается в коде сзади следующим образом:

Public Class Tasks
Private tsk As Task
....
Private Sub LoadMe(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  DataContext = tsk
....
End Sub 

Private Sub SelectTask(sender As Object, e As RoutedPropertyChangedEventArgs(Of Object)) Handles treTasks.SelectedItemChanged
  tsk = DirectCast(e.NewValue, Task)
End Sub
....
End Class

3) Каждое из свойств задачи использует привязку, как показано ниже для свойства Description:

<TextBox
    x:Name="txtDescription"
    AcceptsReturn="True"
    Text="{Binding Path=Description}">
</TextBox>

, и это то, что не работает.Ни один из элементов управления с привязкой не показывает соответствующего значения, когда пользователь выбирает элемент TreeView.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 02 апреля 2019

Вы можете добиться этого, используя ElementName.

. Считайте, что это ваш TreeView контроль

<TreeView x:Name="myTreeView" ItemsSource="{Binding Source={StaticResource cvsTasks}}">
    ...
</TreeView>

Затем, привязка по вашему TextBox будетбыть как,

<TextBox Text="{Binding ElementName=myTreeView, Path=SelectedItem.Description, Mode=TwoWay}"
         AcceptsReturn="True"/>
0 голосов
/ 02 апреля 2019

Установка частного поля tsk не приведет к обновлению представления. Попробуйте установить свойство DataContext в обработчике событий:

Private Sub SelectTask(sender As Object, e As RoutedPropertyChangedEventArgs(Of Object)) Handles treTasks.SelectedItemChanged
  DataContext = DirectCast(e.NewValue, Task)
End Sub

Или сделайте tsk публичной собственностью, к которой вы привязали, и создайте событие PropertyChanged. Для этого необходимо реализовать интерфейс INotifyPropertyChanged .

0 голосов
/ 02 апреля 2019

Пожалуйста, добавьте Mode и UpdateSourceTrigger в ваш XAML.

Text="{Binding Path=Description,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...