You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/AI/Converters/FormFieldTemplateSelector.cs

35 lines
1.1 KiB
C#

1 month ago
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Markup.Xaml.Templates;
using AI.Models.Form;
namespace AI.Converters
{
/// <summary>
/// 按表单字段类型选择模板,避免 Boolean 的 CheckBox 与 Choice 的 ComboBox 同屏时互相覆盖 CurrentValue如列名 "0" 被写成 "False")。
/// </summary>
public class FormFieldTemplateSelector : IDataTemplate
{
public DataTemplate? BooleanTemplate { get; set; }
public DataTemplate? ChoiceTemplate { get; set; }
public DataTemplate? DefaultTemplate { get; set; }
public Control? Build(object? param)
{
if (param is not FormFieldEntry entry)
{
return null;
}
var template = entry.Type switch
{
FormFieldType.Boolean => BooleanTemplate,
FormFieldType.Choice => ChoiceTemplate,
_ => DefaultTemplate,
};
return template?.Build(param);
}
public bool Match(object? data) => data is FormFieldEntry;
}
}