我想在弹出窗口中更新一些文字。但是,当我尝试在后面的代码中设置其值时,我会得到错误"名称' dateChosen'在当前上下文中不存在"。
代码背后:
private void updateDateBinding()
{
lstMenus.Visibility = Visibility.Visible;
dateChosen.Text = ""; // <-- Error here
}
Xaml代码:
<ListView x:Name="lstMenus">
<!-- ...other code... -->
<TextBox x:Name="dateChosen" IsReadOnly="True"
Text="{Binding getDateChosen, Mode=TwoWay}"/>
<!-- ...other code... -->
</ListView>
最初我只会使用PropertyChanged事件更新&#39; dateChosen&#39;但是在调用该事件时它没有更新。所以我决定明确设置值,只是为了找到这个问题。
令我困惑的是,&#39; lstMenus&#39;可以像我期望的那样完全改变。我的ListView如何存在,而不是它内部的TextBox?
-
PS:我已经从这个(高度/宽度,背景,对齐等)中删除了大部分多余的代码,但是我觉得我应该提到有问题的TextBox非常嵌套在这段代码中。完整的继承是:ListView(lstMenus) - ListView.ItemTemplate - DataTemplate - StackPanel - Grid - Grid - AppBarButton - AppBarButton.Flyout - Flyout - Grid - Grid - TextBox(dateChosen)
我已尝试设置&#39; x:姓名&#39;一些介入标签的属性,但总是得到相同的#34;而不是在当前的背景下#34;当我尝试从后面的代码中获取它们时出现问题。
答案 0 :(得分:3)
这个问题不时出现。看这里:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html
由于控件位于生成的容器中,因此它实际上已不在范围内。这就是你无法引用它的原因。您将不得不向ListView询问容器,然后向容器询问该元素。该博客文章将解释这些步骤。这并不困难。
考虑一下,顺便说一句,如果你的ListView中有10个项目,你是否有10个具有相同名称的项目?当然,你不能这样做。而且,这就是为什么存在这个问题的原因。 ListView必须约束子项的范围,因此它不会违反简单的OOP。