Как вы привязываете к свойству команды с caliburn.micro? - PullRequest
3 голосов
/ 13 июля 2011

У меня есть поведение, которое выставляет несколько свойств команды.Обычно я использую MVVM Light и просто использую маршрутизируемую команду в моей модели представления и привязываюсь к ней.Тем не менее, этот проект использует Caliburn.Micro, поэтому я пытаюсь сделать это Caliburn.Micro способом.Есть ли какой-то синтаксис, который я могу использовать для Message.Attach, чтобы сделать это (есть ли какая-нибудь хорошая документация для анализатора для Message.Attach)?

Нужно ли изменять поведение, чтобы выставлять события, чтобы эта работа работала?с Caliburn.Micro?

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Caliburn.Micro имеет собственный механизм связи представления / представления модели в качестве альтернативы командованию, называемый Actions .Вы должны иметь возможность установить параметр Action в качестве Execute делегата вашей существующей команды и, если необходимо, установить соответствующее свойство элемента управления представлением (например, IsEnabled) для привязки к вашему CanExecute делегату.

3 голосов
/ 13 июля 2011

Caliburn.Micro обрабатывает действия маршрутизации для вас, если вы правильно настроили View и ViewModel (он использует некоторые неявные предположения, которые могут быть или не быть вашей чашкой чая) Вот ссылка о действиях: http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation

Лучшим, менее тесно связанным способом сделать то же самое является использование Event Aggrigator - http://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&referringTitle=Documentation

Взгляните, например, на пример кода HelloEventAggrgator, доступный в исходном коде Caliburn.Micro ... Но основной момент таков:

Вы создаете пользовательские события для использования агрегатором.

public YourEvent
{
...
}

Ваше мнение будет публиковать эти пользовательские события - ему все равно, кто слушает, только то, что событие публикуется.

public YourCodeBehind
{
    public Button_Clicked(...)
    {
        this.Events.Publish(new YourEvent());
        ...
    }
    ....
}

Ваши ViewModels будут настроены для обработки этих событий, добавив IHandle

[Export(typeof(...))]    
public class YourViewModel : IShell, IHandle<YourEvent>
{
    [ImportingConstructor]
    public YourViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
        ...
    }
    public Handle(YourEvent event)
    {
        ...
    }
    ...
{

Этот метод поддерживает очень высокий SoC, позволяя представлению действительно иметь дело только с привязкой к данным и публикацией событий - представление не заботится о том, как обрабатываются события.

Каждая модель представления затем настраивается для обработки событий путем добавления интерфейса IHandle. (Обратите внимание, что у вас может быть много разных интерфейсов IHandle в одной ViewModel) ViewModel не заботится о том, как событие было вызвано, только о том, что оно было, и что оно является полномочным для обработки этого события из Aggregator.

0 голосов
/ 13 июля 2011

В итоге я переписал «Поведение» как триггер, чтобы справиться с этим.

...