XAML 带有MVMM的Dotnet MAUI-基于ObservableCollection的动态数据模板,< T>其中T是接口

tjjdgumg  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(123)

我正在尝试构建一个新的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,因为我可以有很多实现。
有没有办法做这种事?
谢谢你,
西里尔

xuo3flqw

xuo3flqw1#

我使用DataTemplateSelector和反射来实现我想要的
第一个
因为我使用命名约定,这是最简单的方法。
DataTemplate使用的视图必须是ContentView而不是ContentPage。

n1bvdmb6

n1bvdmb62#

根据具体情况,我们一般采用两种方法来实现。
如果项目布局中差距较大,建议使用DataTemplateSelector
如果项的布局变化不大,则可以尝试添加一些字段(例如bool isVisible),以便根据上面提到的关联的具体类型(ViewModel的)和视图(通过命名约定)来显示或隐藏一些控件。
当然,你也可以把它和上面的方法结合起来使用。

相关问题