代码之家  ›  专栏  ›  技术社区  ›  Charlie

静态绑定到singleton神秘地失败了

  •  2
  • Charlie  · 技术社区  · 14 年前

    我有以下singleton类,它包含以下属性:

    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"/> 失败,但有例外:

    无法将属性“source”中的值转换为“system.windows.markup.staticextension”类型的对象。

    我已经检查了“存储”名称空间的四倍;我知道它被引用并且是正确的。实例属性是静态的,所以我不理解为什么这个绑定会失败。我在所有这些方面都有类似的静态属性绑定,工作正常。

    有什么想法吗?

    3 回复  |  直到 12 年前
        1
  •  1
  •   robertos    14 年前

    我已经构建了一个示例应用程序,它完全按照您所描述的方式工作,并且没有任何问题。你可以下载它 here .

        2
  •  0
  •   RyanHennig    14 年前

    您是否尝试使用ValueConverter检查StaticExtension正在获取的值? (见方法2 this page )

        3
  •  0
  •   Martin    12 年前

    我也有同样的奇怪问题! 解决方案:

    必须 在用该类执行任何XAML操作之前实例化该类!