CommunityToolkit / CommunityToolkit/dotnet

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

Aperta
#515 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
bug :bug:
Lingua principale
C#
Stelle
3.8k
Fork
400
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia riproducendo l'esempio .NET 6 WPF fornito con CommunityToolkit.Mvvm 8.0.0, quindi esamina l'esempio Messenger di MVVM Toolkit Sample App e il percorso di attivazione di ObservableRecipient. Il lavoro è completato quando UserReceiverViewModel riceve il messaggio facendo clic sul pulsante e l'esempio o la guida all'uso riflette il comportamento funzionante.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
developer-experience
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.