C# 使用反射和泛化的通用用户控制
在我的项目中,我编写了一些UserControl,我试图尽可能多地重用代码。 对于我项目中的每个模型,我创建一个显示CRUD(一个简单表单)的UserControl,以及另一个显示列表(listBox)的UserControl 是否可以对其进行概括(针对具有不同属性的不同类型的模型)? 使用泛化和反射可以创建像泛型UserControl\u Crud和泛型UserControl\u List这样的东西 因此,在我的page.xaml中,我可以使用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
<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}" />