在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;
看起来您需要添加一个属性来访问运行时对象。目前你只是在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;
}
}