Xamarin.Forms FindByName()总是返回null
我有一个Xamarin.Forms ListView和ItemTemplate。 ItemTemplate包含一个名为“myEntry”的输入控件。每次选择一个项目时,我都要将焦点设置为输入控件。在我xaml.cs ListView_ItemSelected事件listView.FindByName( “myEntry”)方法始终返回null:Xamarin.Forms FindByName()总是返回null
private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var lv = sender as ListView;
if (lv != null)
{
var entry = lv.FindByName<Entry>("myEntry");
if (entry != null)
entry.Focus();
}
}
XAML:
<ListView ItemsSource="{Binding ArtikelListe}"
Header=""
HasUnevenRows="True"
ItemSelected="ListView_ItemSelected"
ItemTapped="ListView_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250*"/>
<ColumnDefinition Width="150*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="75*"/>
<ColumnDefinition Width="75*"/>
<ColumnDefinition Width="250*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Text="{Binding Bezeichnung}"/>
<Label Grid.Column="1" Text="{Binding ArtikelNr}"/>
<Label Grid.Column="2" Text="{Binding KatalogNr}"/>
<Label Grid.Column="3" Text="{Binding Lagerplatz}"/>
<Label Grid.Column="4" Text="{Binding Mengeneinheit}"/>
<Label Grid.Column="5" Text="{Binding Sollbestand}"/>
<Entry x:Name="myEntry" Grid.Column="6" VerticalOptions="StartAndExpand" Text="{Binding AktuellerBestand}"/>
<Label Grid.Column="7" Text="{Binding Kommentar}"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我也试图从我的XAML找到其他控制,但它是始终为空。 我做错了什么或者这是一个错误?
警告:您不应在任何代码中使用FindByName<>
。而你正在尝试使用Binding来完成。但我要回答。
myEntry
是ListView单元格模板的一部分。试图找到lv.FindByName<Entry>("myEntry")
返回null,因为其他备选方法将返回所有单元格的所有myEntry
。
它为什么会返回null
?因为你在不同的NameScope
s。 Xaml解析器在您的文件中为每个Xaml根对象创建一个NameScope
,然后为DataTemplates创建不同的NameScopes。
如果您想要关注活动Cell的myEntry
。您将不得不找到选定的单元格,然后在单元格上使用FindByName。
但是,在模板控件中,没有简单的方法来获取实际单元格上的钩子。这就是为什么我以一个警告开始这个答案。再读一遍。
但返回所有myEntry会帮助我更多,因为那么我可以选择正确的一个由列表视图的选定索引或不是? – Mirja
@Mirja不管你有多少个listitems,你总是有一个入口控件? – greenhoorn
每个listitem一个入口控件 – Mirja
基本上,您将为每个项目分配一个具有相同名称的入口控件。 – greenhoorn