在userA单击按钮之后,向所有连接的用户显示特定页面-Xamarin.Forms

时间:2018-07-19 07:01:47

标签: c# .net xamarin.forms signalr

我有Xamarin.Forms前端应用程序和Web API .NET Core后端,我使用SignalR。我可以进行聊天-userA发送一条消息,所有连接的用户都可以看到它。

现在,我需要在userA单击按钮之后向所有连接的用户显示特定页面。我已经创建了DisplayPageToAllConnectedUsers SignalR客户端方法,但是我不知道如何告诉该页面向所有连接的用户显示特定页面。感谢您的任何建议

Xamarin.Forms-SignalRClient.cs

public class SignalRClient : INotifyPropertyChanged
{
    private HubConnection Connection;
    public delegate void MessageReceived(string username, string message);
    public event MessageReceived OnMessageReceived;

    public SignalRClient(string url)
    {
        Connection = new HubConnectionBuilder()
            .WithUrl(url)
             .Build();

        Connection.On<string, string>("ReceiveMessage", (username, text) =>
        {
            OnMessageReceived?.Invoke(username, text);
        });

        Connection.On("DisplayPageToAllConnectedUsers", () =>
        {
           //??display specific page to all connected users??                 
        });
    }

    public void SendMessage(string username, string text)
    {
        Connection.InvokeAsync("SendMessage", username, text);           
    }

    public void DisplayPageToAllConnectedUsers()
    {
        Connection.InvokeAsync("DisplayPageToAllConnectedUsers");              
    }

    public Task Start()
    {
         return Connection.StartAsync(); 
    }

后端-ChatHub.cs

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
    public async Task DisplayPageToAllConnectedUsers()
    {
        await Clients.All.SendAsync("DisplayPageToAllConnectedUsers");
    }
}

*编辑*

我必须放置SignalRClient而不是MainPage,并且如果我使用MessagingCenter而不使用SignalR则它可以正常工作。参见波纹管

在SignalRClient.cs

    public void DisplayPageToAllConnectedUsers()
    {
        //Connection.InvokeAsync("DisplayPageToAllConnectedUsers");
        MessagingCenter.Send<SignalRClient>(this, "MyPage"); //working
    }

但是一旦使用SignalR,它就无法正常工作

        Connection.On("DisplayPageToAllConnectedUsers", () =>
        {
            MessagingCenter.Send<SignalRClient>(this, "MyPage");
        });

1 个答案:

答案 0 :(得分:0)

您可以使用MessagingCenter将消息发送到MainPage,将应用程序重定向到所需的任何页面。例如:

在SignalRClient.cs

MessagingCenter.Send<MainPage> (this, "ChangeToYourPage");

在MainPage.xaml.cs中,您预订此事件:

MessagingCenter.Subscribe<MainPage> (this, "ChangeToYourPage", (sender) => {
    // do something whenever the "ChangeToYourPage" message is sent
    Navigation.PushAsync(YourNewPage);
});