如何将用户控件对象传递给另一个用户控件的内容?

时间:2018-05-27 21:49:18

标签: c# wpf binding user-controls

我在WPF C#中制作了一个蛇游戏,我为不同的视图创建了一些用户控件",这意味着我有了MainWindow 继承自Window类和几个用户控件及其xaml文件。 一个用户控件代表主菜单,另一个代表选项视图等。

public partial class MainWindow: Window
{
    public static Menu menu;
    public MainWindow()
    {
        InitializeComponent();
        menu = new Menu();
        this.Content = menu;
    }
}

如上所述,在MainWindow中我创建了Menu对象(它是用户控件之一 - 类和xaml文件),并将Window的内容设置为Menu的内容。然后在菜单类中我也这样做,例如用户点击带有文本"选项"的按钮,他转到选项用户控件。我只是做

this.Content = new Options(); //"this" is now menu class

当他点击带有文字"单人游戏"的按钮时,他会通过单人游戏进入用户控制

this.Content = new Game();

等等。 通过这种方式,一切正常,我可以在不同的用户控件和"加载"之间切换。应用程序窗口的内容不同,但每次创建新对象时都会出现问题。当我转到选项然后返回菜单时,菜单类的新对象正在创建,我不记得以前的设置等。我想只创建一次然后引用它 - 加载现有的对象内容。我尝试使用绑定但它不起作用。 我可以这样做吗?如何在不丢失数据的情况下在不同的用户控件之间切换并每次都创建新对象?

1 个答案:

答案 0 :(得分:0)

您应该使用singletons

单身人士只允许您拥有的一个实例。这样,每次操作实例时,都会操纵同一个实例。这允许您通过代码保持/更新同一实例的状态。

它看起来像这样,而且它是线程安全的。

public sealed class YourClass
{
    private static readonly YourClass instance = new YourClass();

    /* Explicit static constructor to tell C# compiler
     * not to mark type as beforefieldinit */
    static YourClass()
    {

    }

    private YourClass()
    {

    }

    public static YourClass Instance
    {
        get
        {
            return instance;
        }
    }
}

编辑:OP的错误是设置了MainWindow usercontrol的usercontrol istelf insteand的内容。您可以通过在usercontrol中使用这行代码来获取包含usercontrol的当前窗口。

Window yourParentWindow = Window.GetWindow(this);