Skip to content

The Messenger can't send Message by using the official sample from "MVVM Toolkit Sample App" software #515

@wxysy

Description

@wxysy

Describe the bug

When I learn the Messenger part of CommunityToolkit.Mvvm by following the official sample from "MVVM Toolkit Sample App" software, I find that the sample code doesn't work when I use them in my program.
204764854-3d13f1ab-b21a-4206-8f2a-62ad12ba3760

1

Regression

No response

Steps to reproduce

1.Condition
Framework: .Net 6 WPF 
      IDE: VisualStudio Professional 17.4.2;
 Language: C#

2.Code
The C# Code:

/// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    [ObservableObject]
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //UserReceiver = new UserReceiverViewModel();
            //UserSender = new UserSenderViewModel();
        }

        public UserReceiverViewModel UserReceiver { get; } = new();
        public UserSenderViewModel UserSender { get; } = new();

        private void Btn_SendMes_Click(object sender, RoutedEventArgs e)
        {
            UserSender.SendUserMessage();
            tb_Show.Text += "信息已发送\n";
            tb_Show.Text += $"接收的信息:{UserReceiver.MyStringReceive}\n";
        }
    }

/// <summary>
    /// 用于SendingMessage的信息类
    /// </summary>
    /// <typeparam name="T">该类承载的信息类型</typeparam>
    public sealed class SendingMessageCarrier<T> : ValueChangedMessage<T>
    {
        public SendingMessageCarrier(T value) : base(value)
        {
        }
    }

public class UserSenderViewModel : ObservableRecipient
    {
        public string MyString { get; set; } = "wxy";

        public void SendUserMessage()
        {
            var carrier = new SendingMessageCarrier<string>(MyString);
            Messenger.Send(carrier);
            //WeakReferenceMessenger.Default.Send(carrier);
            //WeakReferenceMessenger.Default.Send(carrier, 12);

            if (MyString == "wxy")
            {
                MyString = "zbk";
            }
            else
            {
                MyString = "wxy";
            }
        }
    }

public class UserReceiverViewModel : ObservableRecipient
    {
        public string MyStringReceive { get; set; } = string.Empty;

        protected override void OnActivated()
        {
            //base.OnActivated();
            Messenger.Register<UserReceiverViewModel, SendingMessageCarrier<string>>(this, MessageHandler);
            //WeakReferenceMessenger.Default.Register<UserReceiverViewModel, SendingMessageCarrier<string>>(this, MessageHandler);
            //WeakReferenceMessenger.Default.Register<UserReceiverViewModel, SendingMessageCarrier<string>, int>(this, 12, MessageHandler);
        }

        private void MessageHandler(UserReceiverViewModel recipient, SendingMessageCarrier<string> message)
        {
            recipient.MyStringReceive = message.Value;
        }
    }


The XAML Code
```xaml
<Window x:Class="LearnMessenger.MainWindow"
        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:local="clr-namespace:LearnMessenger"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="385" FontSize="18" IsReadOnly="True" Height="207"/>
        <TextBox x:Name="tb_Show" Margin="400,10,10,0" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" IsReadOnly="True" Height="207"/>
        <Button x:Name="btn_SendMes" Click="Btn_SendMes_Click" Content="SendMessage" HorizontalAlignment="Left" Margin="24,365,0,0" VerticalAlignment="Top" Height="46" Width="143"/>
    </Grid>
</Window>

3.Click on Button Control(active the method )
4.the UserReceiverViewModel instance cann't receive message from UserSenderViewModel instance.



### Expected behavior

I want to know why the code doesn't work and tell me how to fix it.

### Screenshots

_No response_

### IDE and version

VS 2022

### IDE version

17.4.2

### Nuget packages

- [ ] CommunityToolkit.Common
- [ ] CommunityToolkit.Diagnostics
- [ ] CommunityToolkit.HighPerformance
- [X] CommunityToolkit.Mvvm (aka MVVM Toolkit)

### Nuget package version(s)

8.0.0

### Additional context

_No response_

### Help us help you

Yes, I'd like to be assigned to work on this item

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug 🐛An unexpected issue that highlights incorrect behavior

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions