如何处理共享许多功能的多个视图?

时间:2011-08-18 14:42:17

标签: c# silverlight

我有一个项目有三个模型:一个基本模型和两个从第一个模型派生的模型。

导出的模型有“编辑器”视图,因此用户可以创建/编辑/删除。我的问题是这些模型共享很多功能(显然)。理想情况下,控件可以被拉出并放入自己的视图中,以供每个编辑器视图使用。我的问题是我还有很多拖放功能,用户可以将项目从基本模型中拖出列表,然后将其放入派生模型的列表中。

我将拉出共享控件并为派生模型创建编辑器视图,还为编辑器视图使用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)创建属性,以获取和设置基本视图模型上的相应属性。对我来说似乎很脏!

0 个答案:

没有答案