如何在WinUI 3的XAML中将MetadataControl项绑定到集合
实现方法
你原有代码无法运行是两个写法错误导致的:
MetadataControl的Items属性只接受IEnumerable<MetadataItem>类型的集合,直接绑定单个自定义类实例属于类型不匹配- 你把
DataTemplate错误嵌套在了ControlTemplate标签下,这个控件不需要重写整个控件模板来实现自定义绑定,只要做一次类型映射,就能实现纯XAML绑定,不需要在后台手动填充项。
具体操作
- 先写一个可复用的值转换器,作用是把你的自定义类集合转换成控件能识别的
MetadataItem集合,这个转换器只需要编写一次,后续所有场景都能直接在XAML中调用:
public class CustomToMetadataConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { if (value is IEnumerable<MyClass> sourceList) { return sourceList.Select(x => new MetadataItem { Label = x.Name, // 替换成你自定义类中需要显示的文本属性 Command = x.TapCommand, // 需要点击交互就绑定对应命令,不需要可以忽略 }); } return null; } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } }
- 在XAML页面资源中注册转换器,之后直接绑定你的自定义类集合,通过转换器完成类型转换即可,全程不需要在代码后台手动给Items添加项:
<Page.Resources> <local:CustomToMetadataConverter x:Key="MetadataConv"/> </Page.Resources> <controls:MetadataControl Items="{x:Bind ViewModel.MyCustomCollection, Converter={StaticResource MetadataConv}, Mode=OneWay}" />
如果需要自定义项的展示样式,不需要改控件结构,直接在页面资源中为
MetadataItem类型定义对应的数据模板即可,所有样式配置都可以在XAML中完成。
内容的提问来源于stack exchange,提问作者JPO
相关产品推荐
相关产品推荐

