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数据源选择相应的模板即可