C# 用户控制设计

C# 用户控制设计,c#,wpf,mvvm,C#,Wpf,Mvvm,我必须为AccountManagement编写一个新的用户控件。要在应用程序中集成多个选项卡项,my UserControl必须实现IModule接口,该接口类似于: public interface IModule : INotifyPropertyChanged { FrameworkElement TabContent { get; } ImageSource TabIcon { get; } string TabTitle { get; } } 我想用MVVM为Accoun

我必须为AccountManagement编写一个新的用户控件。要在应用程序中集成多个选项卡项,my UserControl必须实现IModule接口,该接口类似于:

public interface IModule : INotifyPropertyChanged
{
  FrameworkElement TabContent { get; }
  ImageSource TabIcon { get; }
  string TabTitle { get; }
}
我想用MVVM为AccountManagement构建UserControl,所以我想在我的ViewModel中实现IModule接口

我的两个问题是:

这是一个好的解决方案,还是我更喜欢在我的CodeBehind视图中实现IModule

如果在ViewModel中实现IModule,如何将视图作为TabContent传递给父级

否。FrameworkElement是一个视图概念,不应位于ViewModel中。我假设您必须在代码隐藏中实现它,但是为什么不看看其他选项卡是如何编写的,并确保与现有的代码库保持一致呢

编辑: 您仍然需要在视图中实现上述功能。这三个属性都是基于视图的,TabTitle可能是个例外,它可以从视图模型中提取其名称。对于选项卡的内容,没有什么可以阻止您向MVVM移动,但是这个现有的需求必须在视图中完成


判断一个东西是否属于VM的一个很好的经验法则是考虑是否可以在没有任何视图的情况下对VM进行单元测试,或者理论上是否可以编写一个基于文本的控制台视图来驱动VM。

其他选项卡还没有遵循MVVM模式。我已经成功地实现了在VIEW模型中的接口。在创建对象的部分,我创建视图和ViewModel,并将ViewModel指定给视图说明。因此,我可以将选项卡内容从外部设置为视图。