Mal*_*rus 5 c# xaml mvvm-light windows-runtime winrt-xaml
我正在使用XAML和MVVM Light开发WinRT应用程序.这个应用程序旨在使用户在外地时更容易进行数据收集.我有一个应用程序的部分,用户需要输入一些有关几个不同项目的信息.这些项定义为从GenericAsset类继承的类.在GenericAsset具有诸如这样的:
public class GenericAsset
{
public string AssetId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
子类看起来像这样:
public class SubAsset1 : GenericAsset
{
public string RecordNumber { get; set; }
public int SizeDiameter { get; set; }
public string MaterialType { get; set; }
}
public class SubAsset2 : GenericAsset
{
public string Type { get; set; }
public int Size { get; set; }
public string PlanRef { get; set; }
public string InteriorMaterial { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
目前我有15个SubAssets(并且将来还会有更多),我正在寻找一种方法来创建一个数据输入视图/ viewmodel(如果可能的话),这样我就不必为每个资产创建一个单独的视图.此外,如果我可以使通用视图/视图模型工作,我将如何加载自定义数据输入控件(特定于每个子资产的输入),同时保持适当的双向数据绑定到适当的子资产?
您正在寻找的是一个DataTemplateSelector. DataTemplate为每个创建不同的SubAsset. 然后,显示Assetvia a ContentControl(或者ListView在有多个的情况下)。它们都有一个分别用于DataTemplateSelector(ContentTemplateSelector和ItemTemplateSelector) 的插槽。如果它们之间存在相似的部分,您实际上可以DataTemplate通过使用ContentControl指向目标DataTemplate(您希望组合)的内部指向来将一个部分与另一个部分组合。
为了添加DataTemplate来自不同的 s ResourceDictionaries,当您创建s 时DataTemplateSelector,请为DataTemplate您希望拥有的每个属性创建一个属性。
你的选择器可能看起来像这样:
public class AssetDataTemplateSelector : DataTemplateSelector
{
public DataTemplate SubAsset1DataTemplate { get; set; }
public DataTemplate SubAsset2DataTemplate { get; set; }
...
// Data Template Selection Code
...
}
Run Code Online (Sandbox Code Playgroud)
然后在 ResourceDictionary(例如 Generic.xaml)中,当您声明您的 时AssetDataTemplateSelector,只需将所有其他项引用DataTemplates为StaticResources 即可。
<!-- This assumes that AssetDataTemplateSelector has been declared in a namespace
defined in the root of the ResourceDictionary as 'converters'. -->
<!-- It also assumes that you have created DataTemplates with the names
SubAssetXDataTemplate either in the same or other ResourceDictionaries
which are accessible from this one. -->
<converters:AssetDataTemplateSelector x:Key="AssetDataTemplateSelector"
SubAsset1DataTemplate="{StaticResource SubAsset1DataTemplate}"
SubAsset2DataTemplate="{StaticResource SubAsset2DataTemplate}"
...
/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |