我正在使用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,我无法理解为什么。请指教。
答案 0 :(得分:0)
看起来你的某些东西与你的绑定混在了一起。正如dkozl的评论所提到的,UpdateSource将目标(您的视图)中的值发送到源(您的视图模型),因此您的代码有效地将TextBlock
中的值发送到您的视图模型。
此外,您有两个不同的绑定路径 - MyTile.MaxItems
中的TextBox
和MaxItems
中的TextBlock
。如果它们绑定到不同的数据上下文,那么这是有意义的,其中一个将另一个公开为一个名为MyTile
的属性。如果情况并非如此,那么您可能会遇到问题。
我首先要做出这些改变:
TextBox
控件而不是TextBlock
控件检索到的绑定表达式调用UpdateSource。这将获取TextBox
中的值并将其发送到其数据上下文。如果TextBlock
绑定到同一属性,则一旦源更改,它将更新。Mode=TwoWay
中的绑定中删除TextBlock
。除非您以编程方式直接在该控件上设置文本,否则它永远不会有理由将其值发送到其数据上下文。