Источник вашей проблемы
Проблема, с которой вы сталкиваетесь, заключается в том, что после того, как вы нажали Редактор , когда вы нажмете другую, первая будет реагировать как Completed
, а новый постучал реагирует как Focused
. С этого момента каждый раз, когда вы нажимаете на редактор, оба EventHandlers будут вызываться: Completed
, чтобы указать, что предыдущий редактор Завершено ! и Focused
, чтобы указать, что новый редактор Сфокусированный .
Возможное обходное решение
Отказ от ответственности: приведенный ниже код предназначен только для предложенияспособ обойти эту проблему, и я ни в коем случае не пытаюсь сказать, что это оптимальный или производственный код.
Я предполагаю, что вы решили использовать подход, который вы используете, потому что вы думаете,это лучший вариант для вашего случая использования.
Сказав это, если бы мне пришлось обойти вашу проблему, я бы расширил объект, который вы используете для подачи ListView , чтобы включить id , а затем извлекаем id в EventHandler
, чтобы узнать, какой именно объект вызывает событие .
Посмотрите, например, чтобы изучить вашу проблему, я определил следующий объект
public class People
{
public int id { get; set; }
public String FullName { get; set; }
public string Location { get; set; }
public Boolean IsVisible { get; set; }
}
, затем в методе OnAppearing
я написал
protected override void OnAppearing()
{
List<People> i = new List<People>() { new People() { id = 0 }, new People() { id = 1 } };
BindingContext = i;
base.OnAppearing();
}
В XAML я создал простой ListView как
<ContentPage.Content>
<ListView ItemsSource="{Binding .}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Editor Focused="Editor_Focused"
Completed="Editor_Completed"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
И так, в код за я смог отреагировать в EventHandler
с соответственно
private void Editor_Focused(object sender, FocusEventArgs e)
{
var tappedItemId = ((People)((Editor)sender).BindingContext).id;
}
private void Editor_Completed(object sender, EventArgs e)
{
var tappedItemId = ((People)((Editor)sender).BindingContext).id;
}
Я надеюсь, что после прочтения этой проблемы вы сможете увидеть ее.
Удачного кодирования!