x:名称在当前上下文中不存在,但其父项具有

时间:2016-10-06 17:24:53

标签: c# xaml mvvm uwp winrt-xaml

我想在弹出窗口中更新一些文字。但是,当我尝试在后面的代码中设置其值时,我会得到错误"名称' 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;当我尝试从后面的代码中获取它们时出现问题。

1 个答案:

答案 0 :(得分:3)

这个问题不时出现。看这里:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

由于控件位于生成的容器中,因此它实际上已不在范围内。这就是你无法引用它的原因。您将不得不向ListView询问容器,然后向容器询问该元素。该博客文章将解释这些步骤。这并不困难。

考虑一下,顺便说一句,如果你的ListView中有10个项目,你是否有10个具有相同名称的项目?当然,你不能这样做。而且,这就是为什么存在这个问题的原因。 ListView必须约束子项的范围,因此它不会违反简单的OOP。