绑定到DataContext失败

时间:2019-04-02 01:29:15

标签: wpf vb.net data-binding

我有一个显示任务的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 :(得分:0)

请在XAML中添加Mode和UpdateSourceTrigger。

Text="{Binding Path=Description,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

答案 1 :(得分:0)

您可以使用ElementName来实现。

考虑这是您的explode控件

TreeView

然后,绑定到您的<TreeView x:Name="myTreeView" ItemsSource="{Binding Source={StaticResource cvsTasks}}"> ... </TreeView> 就像

TextBox

答案 2 :(得分:0)

设置专用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接口。