来自源的背景图像数据绑定不起作用

时间:2017-03-15 16:01:59

标签: wpf mvvm

在我的窗口xaml:

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Grid.Style>
        <Style TargetType="{x:Type Grid}">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush>
                        <VisualBrush.Visual>
                            <Image Source="{Binding Path=ImageSource,Converter={StaticResource imgconverter}}">
                                <Image.BitmapEffect>
                                    <BlurBitmapEffect KernelType="Box" />
                                </Image.BitmapEffect>
                            </Image>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Style>
</Grid>

(我在窗口资源中加入了这个转换器)

我想将带有模糊效果的背景图像添加到此网格(使用MVVM模式),但我的属性从未在我的viewmodel中调用。如果我使用转换器“Path =。”转换器将工作,但我必须在conveter中使用静态ImageSource,因为如果我为ImageSource(到路径)(BitmapImage,ImageSource,..等)添加任何对象类型,转换器将不会调用。 (我尝试使用带有PropertyChanged值的UpdateSourceTrigger,但这个解决方案对我没有帮助。)转换器只是一个不需要的解决方案,因为这是唯一一种正确设置背景的方法,因为我的ImageSouce属性需要值,但是没有效果没有转换器,不幸的是,如果我添加任何绑定路径,转换器也不会工作。

这是我在ViewModel中的属性:

    private ImageSource _imageSource;
    public ImageSource ImageSource
    {
        get
        {
            return _imageSource;
        }
        set
        {
            _imageSource = value;
            OnPropertyChanged();
        }
    }

有没有想法使用MVVM模式正确设置我的背景图像并且不使用uri路径? (我不想将图像保存到物理存储中)

1 个答案:

答案 0 :(得分:1)

VisualBrush不属于元素树,因此不会继承DataContext的{​​{1}}。

但您可以将Grid定义为资源,并使用Image将其Source属性绑定到父窗口的属性。这应该有效:

{x:Reference}