在WPF / MVVM中使用C#和XAML对正常大小的图像进行ImageSource绑定很慢

时间:2015-04-16 22:24:14

标签: c# wpf xaml mvvm imagesource

我还是MVVM和数据绑定的新手。我有一个GUI,可以根据用户在组合框中选择的内容来更改图像。问题是当图像需要改变时会出现瞬间滞后。延迟会冻结GUI,然后图像出现并且正常工作。即使图像加载缓慢,我也希望GUI不会冻结。

图片不像其他人所询问过的缩略图,并且有解决方案。它是.png,最大的一个是大约17K。考虑到图像的大小,这似乎应该很快。

我尝试过使用不同的线程,但我认为问题出在Image.Source中。我不确定如何在一个单独的线程上运行xaml,但这是我的强力尝试解决这个问题。

真的很感激任何帮助。提前谢谢!

这是xaml:

<!-- Image -->
<Grid Grid.Column="1" Grid.Row="0" 
       Grid.RowSpan="10"
       Margin="40,40,40,0"
       Width="Auto"
        >
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Image Grid.Column="0" Grid.Row="0"
        Height="Auto"
        Source="{Binding Path=ProfileImage}"
        Stretch="UniformToFill"
        Width="Auto"
       />
    <Label Grid.Column="0" Grid.Row="1"
        Content="{Binding Path=Profile}"
        Height="{Binding Path=ProfileCaptionHeight}"
        HorizontalAlignment="Center"
        HorizontalContentAlignment="Center"
        VerticalAlignment="Bottom"
        VerticalContentAlignment="Bottom"
        />
</Grid>

这是绑定属性:

public string ProfileImage
{
    get
    {
        if (this.ProfileImageShown)
        {
            return _profileImage;
        }
        return null;
    }
    set
    {
        _profileImage = value;

        if (value != null)
        {
            this.ProfileImageShown = true;
        }
        else
        {
            this.ProfileImageShown = false;
        }
        base.OnPropertyChanged("ProfileImage");
    }
}

其中_profileImage是图像的完整路径。

1 个答案:

答案 0 :(得分:0)

您可以尝试将IsAsync = true添加到绑定中。这应该会阻止它至少锁定你的用户界面。如上所述,无论如何它应该非常快,所以可能会有其他事情发生。

            <Image Grid.Column="0" Grid.Row="0"
                Height="Auto"
                Source="{Binding Path=ProfileImage, IsAsync=True}"
                Stretch="UniformToFill"
                Width="Auto"
               />