我有一个显示任务的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项时,没有绑定控件会显示相应的值。
我做错了什么?
答案 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接口。