CommunityToolkit / CommunityToolkit/dotnet
The Messenger can't send Message by using the official sample from "MVVM Toolkit Sample App" software
- 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.


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