绑定Window.IsEnabled到静态bool属性

时间:2015-06-24 16:21:46

标签: c# wpf xaml binding static

我的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}"

3 个答案:

答案 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}">