我正在努力將影像源設定為我從資料庫收到的值。下面是我的 XAML 的相關部分,它的代碼隱藏和它的視圖模型。
XAML:
<Label Text="{Binding ViewModel_Fid}" />
<Image Source="{Binding ViewModel_ImageStream}" />
代碼隱藏:
protected override void OnAppearing() {
base.OnAppearing();
myViewModel = new myViewModel();
myViewModel.PopulateFid();
BindingContext = myViewModel;
}
查看型號:
public event PropertyChangedEventHandler PropertyChanged;
private string _fid;
public async void PopulateFid() {
_fid = await getFid();
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ViewModel_Fid)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ViewModel_ImageStream)));
public MemoryStream ViewModel_ImageStream {
get {
byte[] buffer = myGetBytes(_fid);
return null == buffer ? null : new MemoryStream(buffer);
}
}
問題是,ViewModel_ImageStream 在 PopulateFid 之前系統地執行,這意味著在 ViewModel_ImageStream 中我總是得到 _fid = null。我很確定這是由于 PopulateFid 是異步的,但我需要它是這樣的,因為 getFid() 是一個外部異步函式。
如何在設定 ViewModel_ImageStream 之前強制執行 PopulateFid?
謝謝!
PS。請參閱下面的解決方案/答案。
uj5u.com熱心網友回復:
最終對我有用的是在運行時添加 Image 元素(即,不在 XAML 中指定它)。一旦我在 View Model 中檢索到必要的資料,我就會添加它。
所以在代碼隱藏中:
protected override void OnAppearing() {
base.OnAppearing();
myViewModel = new myViewModel();
myViewModel.PopulateFid();
BindingContext = myViewModel;
myViewModel.LoadImage = (obj) => {
var img = new Image();
img.Source = new StreamImageSource() {
Stream = (token) => getstream(token)
};
mainstack.Children.Add(img);
};
}
private async Task<Stream> getstream(object token) {
return new MemoryStream(myViewModel.myGetBytes);
}
在視圖模型中:
private string _fid;
public async void PopulateFid() {
_fid = await getFid();
LoadImg?.Invoke(true);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408391.html
標籤:
上一篇:圖片未顯示div類
