UWP从另一个类访问参数

时间:2018-07-25 10:42:31

标签: c# class oop parameters uwp

Helloo全部 我目前正在开发具有TCP服务器以及一些其他功能的UWP应用。 我开发了一种方法,可以通过修改Mainpage.Caml.cs中的1个值(此处显示的代码)来更改背景颜色:

public sealed partial class MainPage : Page
{
    public Windows.UI.Color backgroundColor;
    public MainPage()
    {
        this.InitializeComponent();
        BackgroundColor = Windows.UI.Color.FromArgb(255, 255, 255, 255);
        MainConnection connector = new MainConnection();
        connector.StartConnection("0.0.0.0", "10500");
    }

    public Windows.UI.Color BackgroundColor
    {
        get => backgroundColor;
        set => backgroundColor = value;
    }
}

我还使用getter和setter作为backgroundColor。 如您所见,我还有另一个名为ConnectionClass的类,该类处理连接并获取有关操作的说明。 ConnectionClass基于MSDN中公开的示例:

    class MainConnection
{
    private bool connectionAllowed = true;

    public async void StartConnection(string net_aadress, string port_nr)
    {
        Windows.UI.Color backgroundColor;
        backgroundColor = ChangeBackground(255, 255, 255);
        try
        {
            var streamSocketListener = new StreamSocketListener();

            // The ConnectionReceived event is raised when connections are received.
            streamSocketListener.ConnectionReceived += this.StreamSocketListener_ConnectionReceived;

            // Start listening for incoming TCP connections on the specified port. You can specify any port that's not currently in use.
            await streamSocketListener.BindServiceNameAsync(port_nr);

            Debug.WriteLine("server is listening...");
            //Mainpage.viewModel.BackgroundColor = Windows.UI.Color.FromArgb(255, 255, 0, 255);
        }
        catch (Exception ex)
        {
            Windows.Networking.Sockets.SocketErrorStatus webErrorStatus =
                Windows.Networking.Sockets.SocketError.GetStatus(ex.GetBaseException().HResult);
            Debug.WriteLine((webErrorStatus.ToString() != "Unknown" ? webErrorStatus.ToString() : ex.Message));
        }
    }

    private async void StreamSocketListener_ConnectionReceived(
        Windows.Networking.Sockets.StreamSocketListener sender,
        Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
    {

       do
        {
            RecievePacket();
            decodePacket(); //using switch case 
            switch(command)
            case endConnection:
                connectionAllowed = false;
                SendResponsePacket();
                break;
            case changeBackground:
                    //in here we find out that we have to set BackgroundColor to some other color. How can i pass R G and B values from here to main
                SendResponsePacket();
                break;

        }
        while(connectionAllowed == true)
    }



    Windows.UI.Color ChangeBackground(UInt16 r, UInt16 g, UInt16 b)
    {
        return Windows.UI.Color.FromArgb(255, (byte)r, (byte)g, (byte)b);
    }

}

在ConnectionClass中,存在一种情况,我们突然从解码包中发现我们必须更改backgroundColor,但是该属性存在于MainPanel.xaml.cs中 如何从刚刚指出的范围访问和更改该参数?

1 个答案:

答案 0 :(得分:1)

最好的方法是让您的Connection类在发生错误时公开事件,然后MainPage可以为该事件注册一个处理程序,并在事件为上调。这样,网络堆栈中的低级错误不会与UI的高级属性紧密耦合(这将是一个糟糕的设计)。

如果您需要帮助来创建活动,请参见Handling and Raising events on MSDN

另外,您的字段backgroundColorpublic也不有意义-应该是private,因为您有一个public属性获取器/设置器。您甚至可以完全忽略该字段,而仅依靠自动实现的属性:

public Color BackgroundColor { get; set; }