我与Xamarin的冒险永远不会结束。
我在ListView中使用Entry控件时发现了一个问题。我的ContentPage中有一个带ViewCells的ListView。每个ViewCell都有一个CustomEntry(我已创建)。
如果用户将Entry留空,我想要控制。如果他将条目留空,我想留下条目的最后一个值。
对我来说最简单的解决方案是使用聚焦和非聚焦事件。但事件之间的行为非常奇怪。
public class CustomEntry : Entry
{
private string oldValue;
public CustomEntry()
{
this.oldValue = "1";
this.Focused += CustomEntry_Focused;
this.Unfocused += CustomEntry_Unfocused;
}
private void CustomEntry_Focused(object sender, FocusEventArgs e)
{
if (this.Text != null)
{
this.oldValue = this.Text;
}
}
private void CustomEntry_Unfocused(object sender, FocusEventArgs e)
{
try
{
if (this.Text != null) {
//If the user leaves the field empty
if (this.Text.Trim().Equals(string.Empty))
{
this.Text = this.oldValue;
}
}
}
catch (FormatException ex) { }
}
}
MainPage.xaml的XAML代码:
<Grid>
<ListView x:Name="lst" BackgroundColor="Red" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" BackgroundColor="Yellow" >
<local:CustomEntry BackgroundColor="Gray" FontSize="30"
Keyboard="Numeric" Text="{Binding NumElements}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
最后是MainPage.xaml.cs:
public partial class MainPage : ContentPage
{
private List<ItemModel> coleccio;
public MainPage()
{
InitializeComponent();
this.coleccio = new List<ItemModel>();
this.coleccio.Add(new ItemModel("1")); //"1" value for NumElements property
this.coleccio.Add(new ItemModel("2")); //"2" value for NumElements property
this.coleccio.Add(new ItemModel("3")); //"3" value for NumElements property
this.lst.ItemsSource = this.coleccio;
}
}
重现问题:
调试跟踪是:
我做错了什么?或者是关于Xamarin Entry控件的错误?
我正在使用带有Android 6.0的Nexus 5设备进行调试。