Хорошо ли играет Caliburn.Micro с пользовательскими элементами управления? - PullRequest
17 голосов
/ 06 марта 2012

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

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

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

1 Ответ

37 голосов
/ 06 марта 2012

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

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

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

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

Таким образом, это концептуально можно рассматривать как модель представления / представление, а не как UserControl со свойствами зависимости и т. д.

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

Если у вас есть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...