UWP绑定ListView';s项作为UserControl DataTemplate

本文关键字:UserControl DataTemplate 绑定 ListView UWP | 更新日期: 2023-09-27 17:58:36

我试图实现一个Master/detail视图,并试图了解如何将所选项绑定到具有两个DataTemplate的UserControl中。

我有两种型号(我称之为教师和学生)

我的视图模型:

public class Page_ProfilVM : NotificationBase
{
    public ObservableCollection <AbstractInfosProfilVM> InfosProfil { get; set; }
    private AbstractInfosProfilVM selectedProfil;
    public  AbstractInfosProfilVM SelectedProfil
    {
        get { return selectedProfil; }
        set
        {
            SetProperty(selectedProfil, value, () => selectedProfil = value);
         }   
     }
}
public abstract class AbstractInfosProfilVM : NotificationBase
{
    private string nom;
    public  string Nom
    {
        get { return nom; }
        set { SetProperty(nom, value, () => nom = value); }
    }
}
public class TeacherInfosProfilVM : AbstractInfosProfilVM
{
}
public class StudentInfosProfilVM : AbstractInfosProfilVM
{
}

我正确显示主视图

<!-- ListView -->
<ListView  ItemSource="{x:bind ViewModel.Profils}" 
           SelectionMode="Single" 
           SelectedItem="x:bind ViewModel.SelectedProfil, Mode="TwoWay", Converter={.....}}">
<ListView.ItemTemplate>
    <DataTemplate x:DataType="vm:AbstractProfilVM">
        <!-- Master -->
        <widget:CelProfilMaster CelProfilMasterName={x:Bind Name} CelProfilMasterAge={x:Bind Age} ... />
    </DataTemplate>
</ListView.ItemTemplate>

我在详细信息视图中正确地显示了所选项目的详细信息(具有依赖属性的用户控件)。但现在我需要选择合适的数据Tempalte来显示教师的属性和学生的属性。但它不起作用。

<!-- Details-->
<widget:CelluleProfilDetails x:Name = "DetailContent" 
                             CelluleProfilDetailsNom = "{x:Bind ViewModel.SelectedProfil.Nom,Mode=TwoWay,Converter={StaticResource GenericConverter}}"
                             CelluleProfilDetailsPrenom = "{x:Bind ViewModel.SelectedProfil.Prenom, Mode=TwoWay,Converter={StaticResource GenericConverter}}" >
<widget:CelluleProfilDetails.CelluleProfilDetailsContent>
    <ContentPresenter Content="{x:Bind ViewModel.SelectedProfil,Mode=OneWay}">
    <ContentPresenter.Resources>
        <DataTemplate x:DataType="viewModels:TeacherInfosProfilVM" x:Name="T1" >
            <TextBlock Text="{x:Bind Nom}"/>
        </DataTemplate>
        <DataTemplate x:DataType="viewModels:StudentInfosProfilVM" x:Name="T2" >
            <TextBlock Text="{x:Bind Nom}"/>
        </DataTemplate>
    </ContentPresenter.Resources>
    </ContentPresenter>                        
</widget:CelluleProfilDetails.CelluleProfilDetailsContent>
</widget:CelluleProfilDetails>

我试图显示教师/学生的名称,但它只显示视图模型的名称。如何在"CelluleProfileDetails.celluleProfileDetailsContent"中正确显示教师属性和学生属性?

UWP绑定ListView';s项作为UserControl DataTemplate

如果您正在寻找数据绑定概念,这些概念将允许您根据数据类型将两个不同的数据模板加载到视图模型中,那么您一定应该查看下面的视频。

我在我的一个应用程序中实现了同样的功能,我不想在这里发布任何代码,因为这只是另一个复制粘贴解决方案。

查看此视频

如果您对DataTemplateSelector的解释有任何问题,请告诉我。