MVVM Light Toolkit:是否可以通过触发器在xaml中发送消息?

时间:2010-09-09 15:49:12

标签: mvvm-light

是否可以通过触发器在xaml中发送消息?

感谢。

1 个答案:

答案 0 :(得分:1)

我假设您指的是MVVM Light Toolkit的消息传递。如果是,那么不,这是不可能的。

然而,View不负责发送消息等事情。视图的职责是提供数据视图和与用户的交互。相反,您应该让ViewModel发送消息。您可以在视图中使用命令“触发”消息,但命令execute是实际发送消息的内容。

这是一个示例View(MainPage.xaml),它有几种不同的方法来执行命令。

<UserControl x:Class="MvvmLight5.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4" mc:Ignorable="d"
             DataContext="{Binding Main, Source={StaticResource Locator}}">
    <StackPanel x:Name="LayoutRoot">
        <TextBlock Text="Click Here to Send Message">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <cmd:EventToCommand Command="{Binding Path=SendMessageCommand, Mode=OneWay}"
                                        CommandParameter="Sent From TextBlock" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </TextBlock>
        <Button Content="Or Click Here"
                Command="{Binding Path=SendMessageCommand, Mode=OneWay}"
                CommandParameter="Sent From Button" />
    </StackPanel>
</UserControl>

这是发送消息的MainViewModel.cs。

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;

namespace MvvmLight5.ViewModel
{
    public class MainViewModel : ViewModelBase
    {
        public RelayCommand<string> SendMessageCommand { get; private set; }

        public MainViewModel()
        {
            SendMessageCommand = new RelayCommand<string>(SendMessageCommandExecute);
        }

        private void SendMessageCommandExecute(string sentFrom)
        {
            Messenger.Default.Send(new NotificationMessage(sentFrom));
        }
    }
}

另外,我应该注意这些是在Silverlight 4中创建的。