2012-09-18 93 views
2

我有與靜態屬性綁定的問題。
我想有LabelContent真正取決於布爾變量的值。單向綁定靜態屬性失敗

XAML:

<Label Content="{Binding Source={x:Static l:MainWindow.IsTrue}, Mode=OneWay}" /> 

後面的代碼:

public partial class MainWindow : Window 
{ 
    public static bool IsTrue { get; set; } 
    DispatcherTimer myTimer; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     myTimer = new DispatcherTimer(); 
     myTimer.Interval = new TimeSpan(0, 0, 2); // tick every 2 seconds 
     myTimer.Tick += new EventHandler(myTimer_Tick); 
     myTimer.IsEnabled = true; 
    } 

    void myTimer_Tick(object sender, EventArgs e) 
    { 
     IsTrue = !IsTrue; 
    } 
} 

它顯示所有的時間。

我知道,爲了實現雙向綁定I need to指定Path。但我需要一種方式綁定。

回答

6

問題是,WPF不知道什麼時候(或如果)你的財產變化。與實例方法不同,沒有可以實現的INotifyPropertyChanged樣式的界面,因爲您不能擁有「靜態界面」。因此,它永遠不會看到你改變的價值。

如果您使用的是WPF 4.5,則可以使用新的static property changed notification support來處理此問題。

在.NET 4.0或更早版本中,處理此問題的最簡單方法通常是將該屬性包裝爲單例,並在單例實例上使用INotifyPropertyChanged