c# - Xamarin Forms 绑定来自 Resources/Drawable 文件夹的图像
问题描述
我有个问题。我想要做的是从 ViewModel 绑定一个 ImageSource。图像文件名为 ledstrip.png,位于 Resources/Drawable 文件夹中。我正在使用以下 xaml:
<ListView ItemsSource="{Binding knownDeviceList}" SelectionMode="None" RowHeight="90">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<AbsoluteLayout HeightRequest="70" Margin="20,20,20,0">
<StackLayout Opacity="0.3" BackgroundColor="White"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All" />
<StackLayout AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All">
<Grid RowSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="70" />
</Grid.ColumnDefinitions>
<Image Source="{Binding DeviceImage}" Grid.RowSpan="2" Grid.Column="0" Margin="5" />
</Grid>
</StackLayout>
</AbsoluteLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的 ViewModel 中,我有以下代码:
public class VM_DeviceList : BindableObject
{
private ObservableCollection<DisplayedDevice> _knownDeviceList;
public ObservableCollection<DisplayedDevice> knownDeviceList
{
get
{
return _knownDeviceList;
}
set
{
if (_knownDeviceList != value)
{
_knownDeviceList = value;
OnPropertyChanged();
}
}
}
public VM_DeviceList()
{
knownDeviceList = new ObservableCollection<DisplayedDevice>();
MyHandler();
}
private async Task LoadKnownDeviceList()
{
foreach (KnownDevice device in App.KnownDeviceList)
{
DisplayedDevice displayedDevice = new DisplayedDevice();
displayedDevice.Id = device.Id;
displayedDevice.Name = device.Name;
switch (device.Type)
{
case "ledstrip":
displayedDevice.DeviceImage = "ledstrip.png";
break;
case "triangle":
displayedDevice.DeviceImage = "triangle.png";
break;
}
knownDeviceList.Add(displayedDevice);
}
}
public Task MyHandler()
{
return LoadKnownDeviceList();
}
public class DisplayedDevice
{
public int Id { get; set; }
public string Name { get; set; }
public string DeviceImage { get; set; }
}
}
问题是当我在 xaml ImageSource 中键入“ledstrip.png”时,图像会显示出来,但是当我像上面显示的那样绑定它时,屏幕上不会出现图像!
我做错了什么,我该如何解决?
解决方案
由于您在单独的 for 循环中更改 DisplayImage。您必须通知 UIDisplayImage
属性值已更改。
用于INotifyPropertyChanged
通知类的DisplayImage
属性DisplayedDevice
已更改为 UI。
public class DisplayedDevice : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private string deviceImage;
public int Id { get; set; }
public string Name { get; set; }
public string DeviceImage
{
get
{
return deviceImage;
}
set
{
deviceImage = value;
OnPropertyChanged();
}
}
}
推荐阅读
- excel - 防止列表框中重复的问题
- django - 如何获取在 HTML 页面中上传的图像,在 Django 中
- javascript - HTML标签在另一个标签内循环
- swiftui - 如何将内容视图缩放到多个屏幕尺寸?SwiftUI
- jenkins - Jenkins 管道作业执行
- node.js - req.isAuthenticated() 在成功重定向后返回 false
- vue.js - 从组件继承道具
- c++ - 当我尝试使用我的 dll 中的函数时出现问题
- python - 如何从数据框中获取特定值,使用熊猫绘制图表
- python-3.x - 为什么 Azure 的 Speech To Text 这么慢?