System.Byte []'不是属性ImageSource

时间:2018-08-21 11:43:55

标签: wpf mvvm data-binding

我有一个要在其中设置背景图像的用户控件。如果我这样做,它将起作用:

视图:

<UserControl.Background>
        <ImageBrush AlignmentX="Center" AlignmentY="Center" Stretch="Uniform" Opacity="0.25" ImageSource="{Binding Logo}">
            <ImageBrush.RelativeTransform>
                <ScaleTransform ScaleX="0.75" ScaleY="0.75" CenterX=".5" CenterY="0.5" />
            </ImageBrush.RelativeTransform>
        </ImageBrush>
    </UserControl.Background>

视图模型中的属性:

private byte[] _logo = GlobalVariables.Logo;
        public byte[] Logo
        {
            get { return _logo; }
            set
            {
                _logo = value;
                base.RaisePropertyChangedEvent("Logo");
            }
        }

在启动应用程序时,我真的将徽标加载到了全局变量中,因为徽标存储在数据库中,因此我只需要加载一次,而不是每次要打印文档时都要加载。

所以这是一个全局变量,我试图直接从全局变量中获取徽标,这样就可以避免在视图模型中具有属性的需要。

所以在我看来,我正在尝试以下代码:

<UserControl.Background>
        <ImageBrush AlignmentX="Center" AlignmentY="Center" Stretch="Uniform" Opacity="0.25" ImageSource="{x:Static vg:GlobalVariables.Logo}">
            <ImageBrush.RelativeTransform>
                <ScaleTransform ScaleX="0.75" ScaleY="0.75" CenterX=".5" CenterY="0.5" />
            </ImageBrush.RelativeTransform>
        </ImageBrush>
    </UserControl.Background>

在这种情况下,出现以下错误:

'System.Byte []'没有真正意义上的'ImageSource'。

我不明白为什么,因为在可行的示例中,我的视图模型中的属性也是Byte [],实际上,在我的视图模型中,我正在将glbal变量设置为该属性。

谢谢。

1 个答案:

答案 0 :(得分:2)

使用静态属性Binding受益于内置类型转换(显然,StaticExtension并未使用):

class Something {
  void tutu() {
    ...
    var list = new List<Data>();
    var data = new Data("caca", "toto");
    list.add(data);
    ... use list ...
  }
}

请注意,<ImageBrush ImageSource="{Binding Path=(vg:GlobalVariables.Logo)}" .../> 应该是此处的公共静态属性。

如果它是一个静态字段,则可以这样编写Binding:

Logo