簡體   English   中英

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

[英]Reference object in App.xaml.cs in new window

我正在嘗試創建一個對象,該對象將保存應用程序在運行時全局需要的所有值。 我以為我會使用App.xaml.cs,因為如果我正確理解該代碼是首先運行並保存在內存中的,那么這就是應用程序的核心。

在本文底部的代碼的.inProgress部分獲取此錯誤:

'App'不包含'inProgress'的定義,找不到可以接受類型為'App'的第一個參數的擴展方法'inProgress'(您是否缺少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對象,以便可以看到應用程序是否可以關閉,請記住,可能不需要關閉,但是除了關閉窗口之外,我還需要執行類似的任務。

類> Commands.cs

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

看來您需要添加屬性才能訪問運行時對象。 當前,您只是在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;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM