Caliburn.Micro & Infragistics XamDockManager + TabGroupPane - PullRequest
1 голос
/ 30 ноября 2010

Я пытаюсь заставить Infragistics TabGroupPane интегрироваться с Caliburn.Micro в соответствии со стандартным WPF TabControl.

Я пытался добавить новое соглашение в загрузчик (модификация стандартного WPF).), но не увенчались успехом.

Моя TabGroupPane определяется как:

<igDock:TabGroupPane x:Name="Items"/>

Когда элемент добавляется в коллекцию, генерируется исключение "InvalidOperationException: TabGroupPane может содержать только 'ContentPane 'и' ContentPanePlaceholder 'instance ".

Кроме того, если мой TabGroupPane находится внутри DockManager:

<igDock:XamDockManager>
    <igDock:DocumentContentHost>
        <igDock:SplitPane>
            <igDock:TabGroupPane x:Name="Items" />
        </igDock:SplitPane>
    </igDock:DocumentContentHost>
</igDock:XamDockManager>

Похоже, что он вообще не найден Caliburn.

Кто-нибудь еще делал это раньше?

Приветствия!

Обновление
Я создал свой собственный класс менеджера док-станции, сообщение в блоге объясняя это или просто код в битовой корзине .Надеюсь, это кому-нибудь пригодится!

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

Вы можете добавить сделанные на заказ элементы управления в класс ConventionManager в Caliburn Micro, я бы просто следовал примеру стандартного TabGroupPanel.

Хотя я бы не стал вносить поправки в реальный класс: если я правильно помню (на странице обсуждений CaliburnMicro Codeplex есть недавняя публикация) Вы также можете добавить специальные соглашения к загрузчику, переопределив метод Config? Я говорю это потому, что если вы изменяете сам класс, вы привязываете себя к определенной версии Caliburn.

Это действительно простая структура, с которой легко познакомиться. Я бы рекомендовал пройтись по коду, который запускается при привязке представления к модели представления, там вы узнаете, как настраиваются эти соглашения.

1 голос
/ 21 декабря 2010

Если вы не можете получить предложение ContentPaneFactory в блоге Infragistics для заполнения TabGroupPane посредством привязки, вы можете рассмотреть следующие альтернативные подходы:

  • сохранить виртуальную машину с BindableCollection на месте, подписаться на уведомление об изменении виртуальной машиныв программном коде и измените TabGroupPane программно в соответствии с фактическим изменением, произошедшим в наблюдаемой коллекции
  • , создайте собственный IResult и вызовите его из ВМ (используя Coroutine.Execute) в соответствии с желаемым вариантом TabGroupPane.IResult.Execute тело, у вас есть доступ к ActionExecutionContext.View, так что вы можете получить доступ к TabGroupPane по имени и выполнять любые необходимые вам действия с ним.
    Таким образом вы освобождаете виртуальную машину от прямой ссылки на конкретную библиотеку элементов управления пользовательского интерфейса.
  • определяет интерфейс, абстрагирующий весь Docking Manager, и использует его как сервис от VM (см. этот пост о реализации Docking Manager ).Этот подход во многом отличается от идеи MVVM, но, к сожалению, большинство док-библиотек не очень дружественны к MVVM ...
0 голосов
/ 30 ноября 2010

Вы пытались использовать более явную привязку?Caliburn может выполнять автоматическое связывание только для определенных типов элементов, и я полагаю, что Infragistics TabGroupPane не является одним из них!

Полагаю, вы должны использовать что-то вроде этого:

<igDock:TabGroupPane x:Name="Items" ItemSource={Binding <what to bind to>}/>

Примечание: этопросто используется в качестве примера, не уверен, что ItemSource является правильным свойством!

...