Использовать ли UserControl в WPF MVVM?
У вас в корне неправильный подход. 
Давайте по порядку.
Сначала почитайте про DataContext в WPF, потом про сам MVVM (тщательнее, чем до этого).По структуре данных: одна таблица - это один тип аггрегации, соответственно другая таблица - другой тип аггрегации, поясню напримере: 
есть таблица продукты (Id, Код продукта) и есть таблица заказчики (Id, Имя, Код заказанного продукта), для таблицы продукты, необходимо создать класс  Productclass Product : INotifyPropertyChanged
{
  public int Id {get;set;}
  public int Code {get;set;}
  // + реализация INPC
}
По INotifyPropertyChanged погуглите что это. 
Затем для таблицы заказчики создать класс Consumer class Consumer
{
  public int Id {get;set;}
  public string Name {get;set;}
  public IEnumerable<Product> Orders {get;set;}
}
Данные выбираются из БД и для каждой таблицы должен создаваться экземпляр соответствующего ей класса.Теперь по отображению и CRUD:
Создаете класс с контекстомclass MyShopViewModel : INotifyPropertyChanged
{
 // Выбранный элемент, для которого будем отображать модальное окно
  public object SelectedItem {get;set;}
}
Где то в коде, где открывается модальное окно, например в методе ShowObjectEditor делаете:public void ShowObjectEditor()
{
  // создаем окно с редактором объекта БД
  var objectEditor = new ObjectEditorView();
  // Устанавливаем ему DataContext, Где myShopViewModel - Объект класса MyShopViewModel
  objectEditor.DataContext = myShopViewModel;
  // показываем окно
  objectEditor.Show();
}В разметке ObjectEditorView
<Window>
  <ContentPresenter Content="{Binding SelectedItem}"/>
</Window>
Но ContentPresenter не знает как его показывать, вот тут и открывается ответ на Ваш вопрос: для каждого типа данных пишете DataTemplate в ресурсах окна, у меня есть два типа - продукты и заказчики, и разметка приобретает вид<Window>
  <Window.Resources>
    <ResourceDictionary>
     <DataTemplate TargetType={x:Type Product}>
      // вот тут и описываем чекбоксы и прочую хрен.
     </DataTemplate>
     <DataTemplate TargetType={x:Type Consumer}>
      // вот тут и описываем чекбоксы и прочую хрен.
     </DataTemplate>
    <.ResourceDictionary>
  <.Window.Resources>
  <ContentPresenter Content="{Binding SelectedItem}"/>
</Window>
Теперь для каждого типа данных автоматом подтянется своя разметка и располагаться это будет в одном окне.
Что не понятно - спросите в комментариях.
А в чем разница? Или куча отдельных классов для отдельных окон, такое же количество отдельных UserControl + один класс на одно общее модальное окно. Плюс в конструкторе этого окна будут загромождения в виде создания UserControl`ов в зависимости от передаваемых данных или параметров, или куча конструкторов, все просто когда окон штук 5, а когда их 20-30, то потом запутаться будет легко, а отдельные окна, с вменяемыми названиями (например ДействиеИмяСущностиОкно - AddCustomerWindow, EditProductWindow и тд, без перепутываний типа CustomerAddWindow и EditProductWindow), будет в дальнейшем проще сопровождать. При необходимости можно создать класс строитель, с отдельными методами для создания окон, сущностей и необходимых параметров.