2010-10-26 54 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操作之前实例化该类!