Подтвердить что ты не робот

Отличается ли Caliburn.Micro с пользовательскими элементами управления?

Я начинающий программист WPF. Я пытаюсь добавить некоторую структуру в свой код: как User Controls, так и MVVM.

Исследование здесь, я обнаружил, что люди рекомендуют Caliburn.Micro. С другой стороны, я нашел несколько жалоб здесь и в другом месте о Caliburn.Micro не играет хорошо с UserControls.

Итак, мой вопрос: Отличается ли Caliburn.Micro с пользовательскими элементами управления?

4b9b3361

Ответ 1

Да, Caliburn.Micro отлично работает с пользовательскими элементами управления. Это упрямая структура, но не для того, чтобы заставлять вас придерживаться определенного пути развития. Как показывают ответы на связанные вопросы, вы всегда можете использовать обычную старую привязку WPF, если у вас есть какие-то особые проблемы.

На самом деле, я бы не хотел, чтобы эти две ссылки сдерживали вас, первый описывает способ привязки отдельных свойств к одному пользовательскому элементу управления, и это решение действительно. Лучшим решением было бы, вероятно, использовать ItemsControl с пользовательским DataTemplate, а затем создать коллекцию DTO в его модели представления, которая содержит имена и значения свойств.

Во второй ссылке указано, как создать представление (UserControl) и создать экземпляр представления в XAML, и вы хотите привязать его к модели представления, тогда это называется view first, и вы имеете чтобы сообщить Caliburn.Micro, где модель представления должна связываться с:

<UserControl ...
   cal:Bind.Model="EasyPlayer.MediaControl.NowPlayingViewModel" />

Итак, это концептуально можно рассматривать как viewmodel/view, а не UserControl с зависимыми свойствами и т.д.

Фактически, вы найдете, когда используете Caliburn.Micro, вы, вероятно, будете использовать меньше и меньше UserControl для выполнения композиции представления. Это связано с тем, что очень легко создавать многоразовые фрагменты пользовательского интерфейса с использованием моделей представления, представлений и первого подхода к модели представления.

Когда у вас есть ContentControl в представлении с тем же именем, что и свойство модели представления в вашей модели представления родителя, тогда Caliburn.Micro найдет представление соответствующей модели представления, введет его в ContentControl, и привязать модель представления/представления.

Например:

public class MyParentViewModel : Screen
{
  public MenuViewModel MenuViewModel { get; set; }

  public DetailsViewModel DetailsViewModel { get; set; }

  public MyParentViewModel()
  {
    this.MenuViewModel = new MenuViewModel();
    this.DetailsViewModel = new DetailsViewModel();
  }
}

<Grid> 
  <Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".2*" />
    <ColumnDefinition Width=".8*" />
  </Grid.ColumnDefinitions>

  <ContentControl Grid.Column="0" x:Name="MenuViewModel" />
  <ContentControl Grid.Column="1" x:Name="DetailsViewModel" />

</Grid>