使MarkupExtension与热重新加载(Xamarin)配合使用



标题最能说明问题。我有一个自定义的MarkupExtension,它从字体中获取一个具有所提供名称的图标,并将其作为FontImageSource返回。该扩展可以在任何可以使用ImageSources的地方使用。扩展本身工作得很好。唯一的问题是,当我使用热重新加载,在我的页面上做一些更改,并且通过保存更改来重新加载视图时,使用我的扩展名的所有控件(例如图像(都是空白的。

有什么方法可以让我的MarkupExtension使用Hot Reload吗?

示例代码:

[ContentProperty(nameof(IconName))]
public class FontImageExtension : IMarkupExtension<ImageSource>
{
private readonly IconFontService iconFontService;
public string IconName { get; set; }
public FontImageExtension()
{
iconFontService = GetService();
}
public ImageSource ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(IconName))
return null;
string glyphCode = iconFontService.GetGlyphCode(IconName);
if (string.IsNullOrEmpty(glyphCode))
return null;
return new FontImageSource()
{
FontFamily = iconFontService.GetFontLocation(),
Glyph = glyphCode,
};
}
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
// Converting back is not needed
return null;
}
}

哦,哇,我是有史以来最笨的人。函数IMarkupExtension.ProvideValue不是为了提供一种将ImageSource转换回任何东西的方法(不知道我为什么认为它是这样做的(。这似乎是在热重新加载时调用的函数。

因此,答案就像将IMarkupExtension.ProvideValue更改为以下内容一样简单:

object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return ProvideValue(serviceProvider);
}

最新更新