是否可以通过触发器在xaml中发送消息?
感谢。
答案 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中创建的。