我在Visual Studio 2015中使用ListView模板创建了一个ListView页面。由于某种原因,我无法从我的代码隐藏中访问我的 ui 的属性,尽管我已经用"x:Name"为 ui 元素命名。这是我在 Xaml 中声明的列表视图:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Style="{DynamicResource ListItemTextStyle}" Text="Central" />
<Label
x:Name="editField"
Style="{DynamicResource ListItemDetailTextStyle}"
Text="{Binding EmergencyCentralNumber}" />
<Entry
x:Name="entryField"
Completed="Entry_Completed"
IsVisble="false"
Text="{Binding EmergencyCentralNumber}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是我的代码隐藏:
async void Handle_ItemTapped(object sender, ItemTappedEventArgs e)
{
if (e.Item == null)
return;
await DisplayAlert("Item Tapped", "An item was tapped.", "OK");
var selectedNumber = (AppUser)e.Item;
//Deselect Item
entryField.IsVisble = true;
editField.IsVisble = false;
//((ListView)sender).SelectedItem = null;
//Deselect Item
//((ListView)sender).SelectedItem = null;
}
async void Entry_Completed(object sender, EventArgs e)
{
var text = ((Entry)sender).Text;
if (string.IsNullOrEmpty(text))
{
await DisplayAlert("Alert", "Please do not leave this field empty", "OK");
}
await Task.Run(() =>
{
var realm = Realm.GetInstance();
var user = realm.All<AppUser>().First();
//cast sender to access the properties of the Entry
realm.Write(() => user.EmergencyCentralNumber = ((Entry)sender).Text);
});
editField.IsVisble = false;
entryField.IsVisble = true;
}
}
为什么我被告知编辑字段和输入字段变量在当前上下文中不存在?
我可能是错的,但名称只能在 DataTemplate 范围内访问以供引用,否则,如果您将事件处理程序放在 ListView 外部的元素上并按名称引用您的项目,您的代码应该如何知道您具体引用的是 ListView 中的哪个项目?因为它们在那种上下文中都有相同的名称。