Xamarin 条目行为和 INotifyPropertyChanged 崩溃
Xamarin entry behaviour and INotifyPropertyChanged crashes
首先,我的应用程序是多语言的,它在列表视图中进行一些数学计算。
此列表视图已绑定到带有模型的 Observable 集合。在 setter 区域内的模型中,我有 INotifyPropertyChanged 来更新 UI.
另一方面,我有一个行为 class,它将逗号转换为点。
当 phone 的语言是英语时,没有问题,但是当我将语言更改为德语时,如您所知,文化设置将逗号设置为默认分隔符,问题就开始了。入口行为和 INotifyPropertyChanged 冲突导致应用崩溃。
我该如何解决这个问题?
这是我的代码:
public class NumericValidationBehavior : Behavior<Entry>
{
protected override void OnAttachedTo(Entry entry)
{
entry.TextChanged += OnEntryTextChanged;
base.OnAttachedTo(entry);
}
protected override void OnDetachingFrom(Entry entry)
{
entry.TextChanged -= OnEntryTextChanged;
base.OnDetachingFrom(entry);
}
private static void OnEntryTextChanged(object sender, TextChangedEventArgs args)
{
if (!string.IsNullOrWhiteSpace(args.NewTextValue))
{
bool isValid = args.NewTextValue.ToCharArray().All(x => char.IsDigit(x));
if (!isValid)
{
((Entry)sender).Text = args.NewTextValue.Replace(",", ".");
//if i remove this line, the app doesnt crash...
}
}
else
{
((Entry)sender).Text = "0";
}
}
}
private double stockTotal;
public double StockTotal
{
get
{
return stockTotal;
}
set
{
stockTotal = value;
PropertyChanged("StockTotal");
//if i remove this line, the app doesnt crash...
}
}
视频显示了更多细节。
enter link description here
我将 XamarinForms 版本从 4.5 降级到 4.3.0.991221。
然后,我删除了 NumericValidationBehavior Class。
现在可以使用了。
首先,我的应用程序是多语言的,它在列表视图中进行一些数学计算。
此列表视图已绑定到带有模型的 Observable 集合。在 setter 区域内的模型中,我有 INotifyPropertyChanged 来更新 UI.
另一方面,我有一个行为 class,它将逗号转换为点。 当 phone 的语言是英语时,没有问题,但是当我将语言更改为德语时,如您所知,文化设置将逗号设置为默认分隔符,问题就开始了。入口行为和 INotifyPropertyChanged 冲突导致应用崩溃。
我该如何解决这个问题?
这是我的代码:
public class NumericValidationBehavior : Behavior<Entry>
{
protected override void OnAttachedTo(Entry entry)
{
entry.TextChanged += OnEntryTextChanged;
base.OnAttachedTo(entry);
}
protected override void OnDetachingFrom(Entry entry)
{
entry.TextChanged -= OnEntryTextChanged;
base.OnDetachingFrom(entry);
}
private static void OnEntryTextChanged(object sender, TextChangedEventArgs args)
{
if (!string.IsNullOrWhiteSpace(args.NewTextValue))
{
bool isValid = args.NewTextValue.ToCharArray().All(x => char.IsDigit(x));
if (!isValid)
{
((Entry)sender).Text = args.NewTextValue.Replace(",", ".");
//if i remove this line, the app doesnt crash...
}
}
else
{
((Entry)sender).Text = "0";
}
}
}
private double stockTotal;
public double StockTotal
{
get
{
return stockTotal;
}
set
{
stockTotal = value;
PropertyChanged("StockTotal");
//if i remove this line, the app doesnt crash...
}
}
视频显示了更多细节。 enter link description here
我将 XamarinForms 版本从 4.5 降级到 4.3.0.991221。
然后,我删除了 NumericValidationBehavior Class。 现在可以使用了。