我正在尝试将我的XAML页面上的椭圆内的imageSource绑定到我的ViewModel中的ImageSource属性,因为我在我的项目中使用MVVM方法。我可以通过断点确认c#中的属性获取图像并被填充,但由于某些奇怪的原因它不会出现在XAML中,当我在混合中使用livepropertyExplorer分析source属性时,ImageSource中的源显示为“0” ”。这是我的代码。
XAML
<Ellipse x:Name="ProfileImage" Style="{StaticResource ProfilePicStyle}">
<Ellipse.Fill>
<ImageBrush ImageSource="{x:Bind ViewModel.Banner, Mode=OneWay}"
Stretch="UniformToFill"/>
</Ellipse.Fill>
</Ellipse>
视图模型
public AllVideosViewModel() : base()
{
//var bit = new BitmapImage();
//bit.UriSource = (new Uri("ms-appx:///Assets/Storelogo.png"));
//Banner = bit;
//Above 3 lines were test code and it works perfect and binding works in this case, but I want the binding as coded in the Initialize method below, because I want that image to bind with the thumbnails of the collection.
Initialize();
}
private async void Initialize()
{
var VideoFiles = (await KnownFolders.VideosLibrary.GetFilesAsync(CommonFileQuery.OrderByName)) as IEnumerable<StorageFile>;
foreach (var file in VideoFiles)
{
<...some code to fill grid view on the same XAML page which works perfect...>
Banner = await FileHelper.GetDisplay(file);//this method returns Image just fine because I am using the same method to display thumbnails on the same XAML page which work fine.
}
}
提前致谢。
更新示例项目
答案 0 :(得分:2)
我在代码中注意到的一些事情。
MainViewModel
需要实施INotifyPropertyChanged
,而您的Banner
属性需要提升属性更改事件。这就是您没有在UI上看到任何图像的原因。await bit.SetSourceAsync()
代替bit.SetSourceAsync()
,因为它不会阻止UI线程。由于您没有直接使用Image
控件而是使用ImageBrush
,因此您应该将解码大小设置为您需要的数量,这样您就不会浪费内存。请注意Image
控件会自动为您执行此操作。
bit = new BitmapImage
{
DecodePixelWidth = 48,
DecodePixelHeight = 48
};
希望这有帮助!