我正在尝试构建一个新的DotNet MAUI应用程序。
我有一个这样的数据源:public ObservableCollection<IIpxElement> IpxElements { get; }
在Xaml中有了这个
<CollectionView ItemsSource="{Binding IpxElements}" SelectionMode="None">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" Span="2" />
</CollectionView.ItemsLayout>
</CollectionView>
我不想为实现IIpxElement
的每个类型创建DataTemplateSelector
当我使用WPF和Caliburn Micro时,我可以做这样的事情:
<ItemsControl x:Name="IpxElements">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Name和ItemSource之间的绑定是自动的,但在这里我并不真正关心。
我只想有一个基于关联的具体类型(ViewModel的)和视图(通过命名约定)的“动态”dataTemplate,因为我可以有很多实现。
有没有办法做这种事?
谢谢你,
西里尔
2条答案
按热度按时间xuo3flqw1#
我使用DataTemplateSelector和反射来实现我想要的
第一个
因为我使用命名约定,这是最简单的方法。
DataTemplate使用的视图必须是ContentView而不是ContentPage。
n1bvdmb62#
根据具体情况,我们一般采用两种方法来实现。
如果项目布局中差距较大,建议使用DataTemplateSelector。
如果项的布局变化不大,则可以尝试添加一些字段(例如
bool isVisible
),以便根据上面提到的关联的具体类型(ViewModel的)和视图(通过命名约定)来显示或隐藏一些控件。当然,你也可以把它和上面的方法结合起来使用。