WPF,与UpdateSourceTrigger = Explicit的数据绑定问题

时间:2015-05-25 14:20:05

标签: .net wpf xaml binding

我正在使用UpdateSourceTrigger = Explicit对textblock进行数据绑定,因为我希望只有在单击按钮时才会发生更新。任务是填写文本框并在输入按钮后,更新文本块。

这是我的XAML:

<TextBox Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left"
                 Margin="10,5,0,5" Width="75"
                 Text="{Binding MyTile.MaxItems, UpdateSourceTrigger=Explicit}" />

<TextBlock x:Name="txtMaxItems" Text="{Binding MaxItems, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" />

我在这里做绑定:

Dim binding As BindingExpression = txtMaxItem.GetBindingExpression(TextBlock.TextProperty)
    binding.UpdateSource()

在绑定中,我的XAML无法识别txtMaxItems,它表示没有声明txtMaxItems,我无法理解为什么。请指教。

1 个答案:

答案 0 :(得分:0)

看起来你的某些东西与你的绑定混在了一起。正如dkozl的评论所提到的,UpdateSource将目标(您的视图)中的值发送到源(您的视图模型),因此您的代码有效地将TextBlock中的值发送到您的视图模型。

此外,您有两个不同的绑定路径 - MyTile.MaxItems中的TextBoxMaxItems中的TextBlock。如果它们绑定到不同的数据上下文,那么这是有意义的,其中一个将另一个公开为一个名为MyTile的属性。如果情况并非如此,那么您可能会遇到问题。

我首先要做出这些改变:

  1. 对从TextBox控件而不是TextBlock控件检索到的绑定表达式调用UpdateSource。这将获取TextBox中的值并将其发送到其数据上下文。如果TextBlock绑定到同一属性,则一旦源更改,它将更新。
  2. Mode=TwoWay中的绑定中删除TextBlock。除非您以编程方式直接在该控件上设置文本,否则它永远不会有理由将其值发送到其数据上下文。