#xaml #c#-4.0 #.net-4.0 #caliburn.micro
#xaml #c #-4.0 #.net-4.0 #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?
Ответ №1:
Если вы заключите имя параметра в одинарные кавычки, оно будет правильно преобразовано для вас.
<Button Content="Close without saving"
c:Message.Attach="Close('false')" />
<Button Content="Save and Close"
c:Message.Attach="Close('true')" />
Ответ №2:
Вы можете попробовать использовать интерактивность триггеры:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cl:ActionMessage MethodName="MyMethod" >
<cl:Parameter Value="True">
</cl:Parameter>
</cl:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
Комментарии:
1. не работает, я предполагаю, что «True» по-прежнему распознается как ссылка на объект или свойство объекта, а не как логическое значение. Есть другие предложения?
2. Я кое-что сделал здесь felicepollano.com/2011/05/09 / … но с другой целью, но я думаю, что это отправная точка для настройки, чтобы решить ваш случай.
3. Я прочитал ваше сообщение в блоге; это могло бы быть решением, но это слишком много кода для чего-то такого простого, как логическое значение. В этом случае я бы предпочел создать два отдельных метода, таких как «SaveWithoutClose()» и «SaveAndClose()»