2010-10-26 55 views
2

我有一個包含以下屬性以下單例類:靜態綁定到辛格爾頓令人不解的失敗

public class Manager : INotifyPropertyChanged 
{ 
    public bool IsOnline 
    ... 

    public static Manager Instance 
    ... 
} 

在加價,我試圖改變一個按鈕,在此基礎上的在線屬性的顏色:

<Button.Style> 
<Style TargetType="{x:Type Button}"> 
    <Style.Triggers> 
    <DataTrigger Value="True"> 
    <DataTrigger.Binding> 
    <Binding Source="{x:Static storage:Manager.Instance}" Path="IsOnline"/> 
    </DataTrigger.Binding> 
    <Setter Property="Background" Value="#8000FF00"/> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 
</Button.Style> 

這種結合<Binding Source="{x:Static storage:Manager.Instance}" Path="IsOnline"/>失敗例外:

無法轉換在ATT值ribute'Source'轉換爲'System.Windows.Markup.StaticExtension'類型的對象。

我已經四重檢查了「存儲」命名空間;我知道它既被引用也是正確的。 Instance屬性是靜態的,所以我不明白爲什麼這個綁定會失敗。我有類似的靜態屬性綁定到那個工作就好了。

任何想法?

+0

如果您使用它會失敗嗎? – 2010-10-26 21:50:17

+0

是的,在這種情況下也失敗了。 – Charlie 2010-10-27 00:09:43

回答

1

我已經構建了一個示例應用程序,它完全符合您所描述的內容,並且沒有問題。你可以下載它here

+0

我將假定它與我們正在使用的控制庫(Infragistics)有關。在我發佈的代碼示例中,我將它簡化爲一個按鈕,但它實際上是一個Infragistics ToggleButton。我想這個問題是孤立的,不是嗎? ;) – Charlie 2010-10-27 21:57:30

+0

最簡單的方法是獲取我的示例代碼並通過Infragistics ToggleButton更改按鈕... – robertos 2010-10-28 12:51:20

0

您是否嘗試過使用ValueConverter來檢查StaticExtension獲取的值? (請參閱this page上的方法2)

+0

這是加載按鈕後立即生成的運行時異常。它永遠不會讓它變成價值轉換器。 – Charlie 2010-10-26 20:43:05

0

我剛剛有同樣奇怪的問題! 解決方案:

必須在對該類執行任何XAML操作之前實例化該類!