WPF MVVM和Viewinheritance

我有十几个不同的视图,除了它们绑定的属性的名称之外几乎完全相同。 例如,以下部分形成两个不同的视图:

    <igDP:XamDataGrid DataSource="{Binding PersonEntries}"     <igDP:XamDataGrid DataSource="{Binding CarEntries}" 

请注意,这些块之间唯一真正的区别是使用的绑定的名称(Person vs Car)。

我在考虑创建一个其他视图inheritance的BaseView类。 此基类将使用通用的绑定名称,以便可以重用它,例如:

     <igDP:XamDataGrid DataSource="{Binding DataItemEntries}" 

这样,我的PersonsView和CarsView可以从BaseViewinheritance而且就是这样。 我还必须对ViewModels进行更改,以便它们公开正确命名的属性,例如DataItem。 我想我可以创建一个基本的ViewModel接口来公开所需的属性,并让其他ViewModel实现它。

对上述有何想法? 尝试按照我的描述创建基本视图或基本视图模型是不是一个坏主意?

谢谢。

您真的要在视图模型中创建inheritance,而不是视图。 我定义了一个ItemViewModelBase类,它公开ItemNameItemsSelectedItemName属性,并从中派生我的视图模型。

观点本身并不真正“inheritance”本身。 实际上,除非您需要在视图中进行自定义,否则您不需要多个视图:您只需要一个显示ItemViewModelBase对象的视图。

当然,如果您确实需要视图不同,您可以进行一定量的自定义,例如:

       

出于另一个原因,这是一个很酷的主意。 现在,如果你不提供数据模板,每当WPF呈现一个对象时,它就会创建一个包含object.ToString()TextBlock 。 实现通用基类为您提供了一种仅通过创建一个数据模板来全局覆盖此行为的方法,例如:

    

这不仅仅是重写ToString()来返回ItemName (这是我开始的地方),但是如果(例如)你想要一个ToolTip ,当用户将鼠标放在它上面时显示详细信息,你只需将它添加到这个模板,它在您的UI中无处不在。

也许你可以继续拥有一个通用的视图模型,而是拥有多个数据层。 这基本上可以帮助您提高数据层的复杂性,这基本上更容易测试和调试。 但是一切都依赖于上下文。 祝好运。