我有一个项目有三个模型:一个基本模型和两个从第一个模型派生的模型。
导出的模型有“编辑器”视图,因此用户可以创建/编辑/删除。我的问题是这些模型共享很多功能(显然)。理想情况下,控件可以被拉出并放入自己的视图中,以供每个编辑器视图使用。我的问题是我还有很多拖放功能,用户可以将项目从基本模型中拖出列表,然后将其放入派生模型的列表中。
我将拉出共享控件并为派生模型创建编辑器视图,还为编辑器视图使用ContentControl(或类似的东西)消耗的共享控件创建视图/视图模型。不幸的是我忘记了拖放操作,我似乎无法从共享控件视图拖到编辑器视图。
除了完全消灭DRY之外,还有解决方案吗?
代码的外观示例如下:
模型:
public class BaseModel
{
string Name;
int Id;
}
public class DerivedModelOne
{
string SomeProperty;
IEnumerable<string> ListOfSomeKind;
}
public class DerivedModelTwo
{
int AnInteger;
}
的ViewModels:
public class BaseEditorViewModel
{
public BaseModel;
// And other such required properties
}
public class DerivedOneEditorViewModel
{
public BaseEditorViewModel;
// And all the other properties for this model...
}
public class DerivedTwoEditorViewModel
{
public BaseEditorViewModel
// And all the other properties...
}
然后,派生编辑器视图的视图将是:
<UserControl>
<Grid>
<ContentControl FOR THE BASE />
<Label />
<TextBlock />
</Grid>
</UserControl>
我也在使用INotifyDataErrorInfo
但到目前为止仅在派生的视图模型上使用{{1}}。为了实现这一点(我认为),我必须在派生视图模型上为基本模型属性(Name和Id)创建属性,以获取和设置基本视图模型上的相应属性。对我来说似乎很脏!