C# 使用反射和泛化的通用用户控制

C# 使用反射和泛化的通用用户控制,c#,reflection,user-controls,windows-store-apps,winrt-xaml,C#,Reflection,User Controls,Windows Store Apps,Winrt Xaml,在我的项目中,我编写了一些UserControl,我试图尽可能多地重用代码。 对于我项目中的每个模型,我创建一个显示CRUD(一个简单表单)的UserControl,以及另一个显示列表(listBox)的UserControl 是否可以对其进行概括(针对具有不同属性的不同类型的模型)? 使用泛化和反射可以创建像泛型UserControl\u Crud和泛型UserControl\u List这样的东西 因此,在我的page.xaml中,我可以使用 <LUC:UserContro_Crud

在我的项目中,我编写了一些UserControl,我试图尽可能多地重用代码。 对于我项目中的每个模型,我创建一个显示CRUD(一个简单表单)的UserControl,以及另一个显示列表(listBox)的UserControl

是否可以对其进行概括(针对具有不同属性的不同类型的模型)? 使用泛化和反射可以创建像泛型UserControl\u Crud和泛型UserControl\u List这样的东西

因此,在我的page.xaml中,我可以使用

<LUC:UserContro_Crud l x:Name="EmployeeUserControl_List" />
<LUC:UserContro_Crud l x:Name="CarsUserControl_List" />
<LUC:UserContro_Crud l x:Name="FruitUserControl_List" />

显示具有不同属性的3个列表的步骤


@高核@Nate钻石

这样,对于任何类型的模型,我都必须制作一个特定的模板。例如CrudPersonTemplate`

<!-- my crud-->
<DataTemplate x:Key="MyCrud">
    <StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Code"/>
            <TextBox x:Name="edtCode" InputScope="Number" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Name" />
            <TextBox x:Name="edtName" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Sex" />
            <TextBox x:Name="edtSex" />
        </StackPanel>
    </StackPanel>
</DataTemplate>

然后(在app.xaml中注册为资源)我可以在Page.xaml中使用它

<ContentControl x:Name="MyTemplate" Content="{Binding}" ContentTemplate="{StaticResource MyCrud}" />

。。。但从page.xaml.cs管理像“edtName”这样的字段是否很困难?我必须编写比使用UserControl更多的代码才能做到这一点。。。 我怎样才能尽可能好地管理我表单的这个字段? 用户控制的区别在哪里?我必须手动绑定ContentTemplate。。。
我在page.xaml中寻找一个通用解决方案,在“视图”中,我只想调用一个通用模板/userControl,并根据page.xaml.cs中关联的对象类型“自动”选择相对布局(我希望能更好地解释它,很抱歉我的无知)

您正在寻找的。基于XAML的技术已经内置了这种功能。但是如果我使用DataTemplate,如何管理其中的对象呢?在基于XAML的技术中,您不会“管理”DataTemplates中的“对象”。
DataTemplate
是特定数据段的可视化表示。为了保持UI和底层数据的同步,您可以使用HighCore所说的在视图(显示)中使用DataTemplate。将其绑定到实际数据的位置,通过数据绑定存储在ViewModel对象中。这样,您就可以从ViewModel内部执行所有数据操作和管理。
<!-- my crud-->
<DataTemplate x:Key="MyCrud">
    <StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Code"/>
            <TextBox x:Name="edtCode" InputScope="Number" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Name" />
            <TextBox x:Name="edtName" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBlock Text="Sex" />
            <TextBox x:Name="edtSex" />
        </StackPanel>
    </StackPanel>
</DataTemplate>
<ContentControl x:Name="MyTemplate" Content="{Binding}" ContentTemplate="{StaticResource MyCrud}" />