我还是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是图像的完整路径。
答案 0 :(得分:0)
您可以尝试将IsAsync = true添加到绑定中。这应该会阻止它至少锁定你的用户界面。如上所述,无论如何它应该非常快,所以可能会有其他事情发生。
<Image Grid.Column="0" Grid.Row="0"
Height="Auto"
Source="{Binding Path=ProfileImage, IsAsync=True}"
Stretch="UniformToFill"
Width="Auto"
/>