在App.xaml.cs中的引用对象在新窗口中

本文关键字:窗口 新窗口 引用 App xaml cs 对象 | 更新日期: 2023-09-27 18:17:55

我试图创建一个对象,该对象将保存应用程序在运行时全局需要的任何值。我想我会使用App.xaml.cs,因为这是应用程序的心脏,如果我理解正确,因为代码首先运行并保存在内存中。

在这篇文章底部的.inProgress部分代码上得到这个错误:

'App'没有包含'inProgress'的定义,也没有扩展名方法'inProgress'接受'App'类型的第一个参数可以是找到(您是否缺少using指令或程序集引用?)

App.xaml.cs

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            //Startup
            Window main = new MainWindow();
            main.Show();
            //Bind Commands
            Classes.MyCommands.BindCommandsToWindow(main);
            //Create runtime objects
            var runtime = new runtimeObject();
        }
        public static explicit operator App(Application v)
        {
            throw new NotImplementedException();
        }
    }
    /// <summary>
    /// Global values for use during application runtime
    /// </summary>
    public class runtimeObject
    {
        private bool _inProgress = false;
        public bool inProgress
        {
            get { return _inProgress; }
            set { _inProgress = value; }
        }
    }

在这里,我试图访问runtime对象,以便我可以看到应用程序是否可以关闭,请记住这可能不需要,但我需要做类似的任务,而不是关闭窗口。

Classes> Commands.cs

bool inProgress = (System.Windows.Application.Current as App).inProgress;

在App.xaml.cs中的引用对象在新窗口中

看起来您需要添加一个属性来访问运行时对象。目前你只是在OnStartup方法中创建一个实例。将该实例分配给一个属性:

public partial class App : Application
{
    public static runtimeObject runtime { get; set; };
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        //Startup
        Window main = new MainWindow();
        main.Show();
        //Bind Commands
        Classes.MyCommands.BindCommandsToWindow(main);
        // Create runtime objects
        // Assign to accessible property.
        runtime = new runtimeObject();            
    }
    public static explicit operator App(Application v)
    {
        throw new NotImplementedException();
    }
}

然后从命令逻辑访问该属性:

public static void CloseWindow_CanExecute(object sender,
                       CanExecuteRoutedEventArgs e)
    {
        if (App.runtime.inProgress == true)
        {
            e.CanExecute = false;
        }
        else
        {
            e.CanExecute = true;
        }
    }