这让我发疯。我一直在寻找问题的根源已有好几个小时,但是我开始怀疑这不是我的逻辑问题……也许我错了。
我有一个简单的Entry。其Text属性绑定到ViewModel中类型为[[double的属性。同时,我订阅了Unfocused
Event,其EventHandler只是将entry.Text
属性设置为"1.0"
(实际上,我可以重现x.y0的问题,即它的任何十进制最后一位是0)。如果现在我在Entry中写任何东西(“ 1”,“ 1”或“ 1.0”除外!!!!!!)并留下Entry(通过在外部点击或在Done上点击),以便[ C0]被触发,App变得无响应。
注意:
我知道在事件处理程序中设置Unfocused
听起来有些奇怪。事实是,我通过尝试按如下格式设置entry.Text = 1.0
值来遇到此问题。entry.Text
[会变得无响应。if (double.TryParse(entry.Text, out double result)) { entry.Text = String.Format("{0:F2}", result); }
试图将小数点舍入为两个小数点。如果我给String.Format
,则期望值应为6.999
,但App
7.00
并按如下所示设置页面的在后面的代码中添加以下
- EventHandler
<StackLayout>
<Entry Text="{Binding Weight}"
Unfocused="entry_Unfocused"/>
</StackLayout>
属性:BindingContext
如:创建
- ViewModel
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
BindingContext = new viewmodel();
}
private void entry_Unfocused(object sender, FocusEventArgs e)
{
((Entry)sender).Text = "1.0";
}
}
中键入任何内容。留下运行应用程序,然后在
- Entry
public class viewmodel : INotifyPropertyChanged
{
public viewmodel()
{
}
private double _Weight;
public double Weight
{
get => _Weight;
set
{
if (_Weight != value)
{
_Weight = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
。Unfocused
我认为这是因为您的set { if (_Weight != value) { _Weight = value; OnPropertyChanged(); } } }
属性是Weight
类型,无法将其正确设置为double
,您可以尝试将Weight定义为字符串。
string
private string _Weight;
public string Weight
{
get => _Weight;
set
{
if (_Weight != value)
{
_Weight = value;
OnPropertyChanged();
}
}
}