C# 为什么每次我点击编辑完成的事件都会触发它?

C# 为什么每次我点击编辑完成的事件都会触发它?,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,我的Xamarin.Forms应用程序有一个ListView,其中每个ViewCell都包含一个编辑器。无论何时点击编辑器,都会触发聚焦事件,但即使未按键盘上的“完成”或“回车”,也会触发已完成事件 是否有人知道发生了什么以及如何修复此问题?请改用TextChanged事件 你问题的根源 它认为,您遇到的问题是,一旦您点击了一个编辑器,当您点击另一个编辑器时,第一个编辑器将作为完成,而点击的新编辑器将作为聚焦。从那时起,每次点击编辑器时,两个EventHandler都将被调用:Complete

我的Xamarin.Forms应用程序有一个ListView,其中每个ViewCell都包含一个编辑器。无论何时点击编辑器,都会触发聚焦事件,但即使未按键盘上的“完成”或“回车”,也会触发已完成事件


是否有人知道发生了什么以及如何修复此问题?

请改用TextChanged事件

你问题的根源 它认为,您遇到的问题是,一旦您点击了一个编辑器,当您点击另一个编辑器时,第一个编辑器将作为完成,而点击的新编辑器将作为聚焦。从那时起,每次点击编辑器时,两个EventHandler都将被调用:Completed以指示上一个编辑器已完成!并重点指出新编辑的重点

可能的解决办法 免责声明:下面显示的代码只是建议如何解决这个问题的一种方法,我决不是说它是最佳的或生产代码

我假设您决定使用您正在使用的方法,因为您认为它最适合您的用例

话虽如此,如果我必须解决您的问题,我将扩展您用于向ListView提供信息的对象,使其包含一个id,然后在EventHandler中检索该id,以便知道哪个项确切地触发了事件

例如,为了探究你的问题,我定义了以下对象

public class People
{

    public int id { get; set; }

    public String FullName { get; set; }

    public string Location { get; set; }

    public Boolean IsVisible { get; set; }

}
然后用我自己写的方法

protected override void OnAppearing()
{
    List<People> i = new List<People>() { new People() { id = 0 }, new People() { id = 1 } };

    BindingContext = i;

    base.OnAppearing();
}
我希望你看完这篇文章后能看穿你的问题


快乐编码

但如果他需要使用已完成的?我认为使用另一个Evthand的建议是公平的,但是你并不是真的试图回答OP.所说的问题……Nick,如果这个帖子回答了你的问题,请考虑把它标记为答案。通过这种方式,您可以增加您自己的帖子对其他为相同或类似问题寻找解决方案的开发人员的有用性。
protected override void OnAppearing()
{
    List<People> i = new List<People>() { new People() { id = 0 }, new People() { id = 1 } };

    BindingContext = i;

    base.OnAppearing();
}
<ContentPage.Content>
    <ListView ItemsSource="{Binding .}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Editor Focused="Editor_Focused"
                            Completed="Editor_Completed"/>

                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>
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;

}