抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

AvaloniaUI没有像WPF一样的ItemTemplateSelector模板选择器,那么要如何根据ItemsSource来自定义选择DataTemplate呢?这里就需要到AvaloniaUI专有的模板选择器IDataTemplate
参考:实现 IDataTemplate

界面模板定义:

界面使用(注意这里mvvm的数据源Item类型model须是DataTemplate中的model类型

代码实现:

public class DataItemTemplateSelector : IDataTemplate
    {
        [Content]
        public Dictionary<string, IDataTemplate> Templates { get; } = new Dictionary<string, IDataTemplate>();

        public IControl Build(object data)
        {
            FlowView? m = data as FlowView;

            if (m.IFVisibility) return Templates["WhetherLine"].Build(data);
            else if (m.ForeachVisibility || m.WhileVisibility) return Templates["ForeachLine"].Build(data);
            else if(m.ForVisibility) return Templates["ForLine"].Build(data);
            else if (m.ExecuteVisibility) return Templates["ExecLine"].Build(data);
            else return Templates["DefaultLine"].Build(data);
        }

        public bool Match(object data)
        {
            return data is FlowView;
        }
    }

在程序的DataTemplates中定义模板后,模板会自动加载到IDataTemplate接口的Templates中,此时根据Data数据源选择相应的模板即可