【问题标题】:Binding to DataContext Failing绑定到 DataContext 失败
【发布时间】:2019-04-02 01:29:15
【问题描述】:

我有一个显示任务的 wpf 窗口。用户单击 TreeView 控件中的任务,然后其他控件(文本框、组合框等)显示所选任务的各种属性。我已经实现了如下:

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) 每个任务属性都使用如下描述属性的绑定:

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

那是行不通的。当用户选择 TreeView 项时,所有具有绑定的控件都不会显示相应的值。

我做错了什么?

【问题讨论】:

    标签: wpf vb.net data-binding


    【解决方案1】:

    设置私有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 接口。

    【讨论】:

    • 我的问题是没有认识到设置 tsk 不会导致视图刷新。我还尝试了您建议的其他方法(tsk 已经有 INotifyPropertyChanged),但是当用户从 TreeView 进行另一个选择时更改为新的 tsk 也不会刷新视图。太糟糕了,因为我认为这是一种更优雅的方法。
    【解决方案2】:

    请在您的 XAML 中添加 Mode 和 UpdateSourceTrigger。

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

    【讨论】:

      【解决方案3】:

      您可以使用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"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-21
        • 2011-05-19
        • 2011-10-17
        • 2016-09-06
        • 2012-11-05
        • 1970-01-01
        • 2013-02-02
        • 2011-10-13
        相关资源
        最近更新 更多