我有一个Xamarin应用程序,现在正在将项目迁移到MAUI。有一个picker的渲染器,它包含OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
,并且在此事件中有一些操作。但是当我试图将其转换为MAUI处理程序时,找不到任何此事件。我如何在MAUI上实现这一点。
这是我的自定义选择器和渲染器,这个渲染器是用于绑定不同的值到选择器的文本属性和下拉列表,就像我想在选择器下拉列表中显示项目描述,当用户选择一个需要绑定项目名称的选择器文本。
public class CustomPicker : Picker
{
public CustomPicker()
{
}
public static readonly BindableProperty DisplayItemTextProperty =BindableProperty.Create(nameof(DisplayItemText),typeof(string), typeof(CustomEntry), default(string), BindingMode.TwoWay);
public string DisplayItemText
{
get { return (string)GetValue(DisplayItemTextProperty); }
set => SetValue(DisplayItemTextProperty, value);
}
}
渲染器
public class CustomPickerRenderer : PickerRenderer
{
CustomPicker customPicker;
public CustomPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
customPicker = Element as CustomPicker;
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (Control != null && customPicker != null && !string.IsNullOrEmpty(customPicker.DisplayItemText))
{
Control.Text = customPicker.DisplayItemText;
}
}
}
1条答案
按热度按时间1u4esq0p1#
有一个用于选择器的渲染器,它包含OnElementPropertyChanged(对象发送器,PropertyChangedEventArgs e),并且在此事件中有一些操作。但是当我试图将其转换为MAUI处理程序时,找不到任何此事件。我如何在MAUI上实现这一点。
MAUI已经在官方wiki中详细阐述了这个问题及其用例,请参阅Property Mappers了解更多详情。
PropertyMapper
是Handlers引入的一个新概念。它是一个字典,将接口的属性Map到其关联的操作。它在我们的控件的接口中定义,它将在OnElementPropertyChanged
中完成的所有操作替换为Xamarin.Forms
: