在下面的代码中,我声明应用程序级static
变量,然后从MainWindow.xaml.cs
访问它。应该避免在这里使用静态变量,而是先在下面的MainWindow.xaml.cs
代码中实例化App class
,并将那里的变量用作var app = Application.Current as App; app.myVariable = "Some Value";
。我在一些地方读到(比如这里(generally
,我们应该避免使用静态变量。
应用程序.xaml.cs:
public partial class App : Application
{
private static string myVarialbe {get; set;}
...........
}
主窗口.xaml.cs:
public partial class MainWindow : Window
{
..........
private void btnUserUpdate_Click(object sender, RoutedEventArgs e)
{
App.myVariable = "Some value";
......
}
}
作为Clemens答案的补充,我更喜欢以下方式:
public partial class App : Application
{
public static App Me => ((App) Application.Current);
public string MyProperty1 { get; set; }
public int MyProperty2 { get; set; }
public void DoSomething() { }
...
}
这样你就不必到处写选角的东西了。你现在可以简单地写这样的代码:
App.Me.MyProperty1 = "some value";
App.Me.MyProperty2 = 5;
App.Me.DoSomething();
由于App
不是静态类,并且该类的实例已经可以通过静态Application.Current
属性访问,因此不需要将其任何属性声明为static。
相反,声明非静态属性,如
public partial class App : Application
{
public string MyProperty { get; set; }
...
}
并像这样访问它们:
((App)Application.Current).MyProperty = "Some value";
注意,应避免在不检查null
结果的情况下使用as
运算符,如
var app = Application.Current as App;
app.MyProperty = "Some Value";
因为这将导致NullReferenceException,而不是InvalidCastException,这是在强制转换操作失败时您实际想要得到的。
在as
可能有效返回null的潜在情况下,测试它:
var app = Application.Current as App;
if (app != null)
{
app.MyProperty = "Some Value";
}