Отправить логическое значение в качестве параметра действия в Caliburn Micro

Это мое представление XAML (некоторый код опущен для удобочитаемости):

<Window ... xmlns:c="http://www.caliburnproject.org">
  <Button Content="Close without saving" c:Message.Attach="Close(false)" />
  <Button Content="Save and Close" c:Message.Attach="Close(true)" />
</Window>
А вот код в ViewModel:
public void Close(bool save) 
{
  if (save) 
  { 
    // save the data 
  }
  TryClose();
}
Конечно, это не работает, потому что параметры действия "true" и "false" не являются объектами или свойствами объекта в XAML. Как я могу заставить это работать и отправить логическое значение в качестве параметра действия в Caliburn Micro?


person KBoek    schedule 07.11.2011    source источник


Ответы (2)


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

<Button Content="Close without saving"
        c:Message.Attach="Close('false')" />
<Button Content="Save and Close"
        c:Message.Attach="Close('true')" />
person Adrian    schedule 08.11.2011

Вы можете попробовать использовать интерактивность + триггеры:

<i:Interaction.Triggers>
            <i:EventTrigger  EventName="Click">
                <cl:ActionMessage  MethodName="MyMethod" >
                    <cl:Parameter Value="True">

                    </cl:Parameter>
                </cl:ActionMessage>
            </i:EventTrigger>
        </i:Interaction.Triggers>
person Felice Pollano    schedule 07.11.2011
comment
не работает, я предполагаю, что True по-прежнему распознается как ссылка на объект или свойство объекта, а не как логическое значение. Любые другие предложения? - person KBoek; 07.11.2011
comment
Я сделал что-то здесь felicepollano.com/2011/05/09/ но с другой целью, но я думаю, что это отправная точка для настройки, чтобы решить ваше дело. - person Felice Pollano; 07.11.2011
comment
Я прочитал ваш пост в блоге; это может быть решением, но для чего-то такого простого, как логическое значение, требуется много кода. В этом случае я бы предпочел создать два отдельных метода, таких как SaveWithoutClose() и SaveAndClose(). - person KBoek; 07.11.2011