我的WPF项目中有App.xaml.cs
代码:
public partial class App : Application
{
public static bool IsInitialized
{
get;
private set;
}
public static async Task Initialize()
{
// Mark application as initialized
IsInitialized = true;
}
}
我的应用程序的主窗口应该被禁用( IsEnabled
== False
),而 App.IsInitialized
标志未设置,因此窗口Initialize()
完成后启用。
如何实现这一目标?
试图使用这个XAML:
IsEnabled="{Binding App.IsInitialized, Mode=TwoWay}"
答案 0 :(得分:3)
您可以使用:
IsEnabled="{Binding Source={x:Static Application.Current}, Path=Initialized}"
此外,您应该在属性Initialized更新时通知以便更新UI,为此您应该实现INotifyPropertyChanged接口并在Initialize()方法上引发PropertyChange事件。
跳这有帮助。
答案 1 :(得分:-1)
从documentation中的MS示例中获取(和修改):
<Binding Source="{x:Static Application.Current}" Path="Initialized"/>
答案 2 :(得分:-1)
是的,在大多数情况下静态不正确,所以我要实现INotifyPropertyChanged,以便UI从我的'控制器'类接收更新通知。
此外,这是未来的精彩代码:https://gist.github.com/schuster-rainer/2644730
这是INotifyPropertyChanged实施样本。
public class AppController : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool m_bInit;
private PropertyChangedEventArgs m_bInitEA = new PropertyChangedEventArgs("IsInitialized");
public bool IsInitialized
{
get { return m_bInit; }
set
{
m_bInit = value;
if (PropertyChanged != null)
PropertyChanged(this, m_bInitEA);
}
}
}
这是XAML:
<Window x:Class=".......
Loaded="OnLoaded" DataContext="{x:Static Application.Current}"
IsEnabled="{Binding Controller.IsInitialized}">