CommunityToolkit / CommunityToolkit/dotnet

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

Open
#515 1 comment 0 reactions 0 assignees View on GitHub
bug :bug:
Dominant language
C#
Stars
3.8k
Forks
400
PR merge metrics
No merged PRs in 30d

Description

### 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](https://user-images.githubusercontent.com/41404936/205243843-4157abbf-2d8e-4b1d-9d79-d72c2c0fcc3f.png)

![1](https://user-images.githubusercontent.com/41404936/205243857-def12904-fc7a-40be-8936-712cae83e84f.png)

### Regression

_No response_

### Steps to reproduce

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

2.Code
The C# Code:

///
/// Interaction logic for MainWindow.xaml
///
[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";
}
}

///
/// 用于SendingMessage的信息类
///
/// 该类承载的信息类型
public sealed class SendingMessageCarrier : ValueChangedMessage
{
public SendingMessageCarrier(T value) : base(value)
{
}
}

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

public void SendUserMessage()
{
var carrier = new SendingMessageCarrier(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>(this, MessageHandler);
//WeakReferenceMessenger.Default.Register>(this, MessageHandler);
//WeakReferenceMessenger.Default.Register, int>(this, 12, MessageHandler);
}

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

The XAML Code
```xaml





```
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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.