c# - 在 Xamarin 表单中使用 MVVM 切换图像可见性
问题描述
我在 Xamarin 表单中使用 MVVM 有 2 个图像可见性。1 个图像表示未选择任何内容,另一个应在表单上进行选择时关闭第一个图像并打开第二个图像。
XAML:
<Image x:Name="greenCheckImage" BackgroundColor="#F5E9E9" Source="GreenCheckmark.gif" Grid.Row="4" Grid.Column="2" HeightRequest="50" WidthRequest="50" HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" IsVisible="{Binding GreenCheck}"></Image>
<Image x:Name="grayCheckImage" BackgroundColor="#F5E9E9" Source="GrayCheckmark.gif" Grid.Row="4" Grid.Column="2" HeightRequest="50" WidthRequest="50" HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" IsVisible="{Binding GrayCheck}"></Image>
模型:
public bool GrayCheck { get; set; }
public bool GreenCheck { get; set; }
查看型号:
private bool grayCheck;
public bool GrayCheck
{
get
{
return grayCheck;
}
set
{
if (grayCheck != value)
{
grayCheck = value;
OnPropertyChanged();
}
}
}
private bool greenCheck;
public bool GreenCheck
{
get
{
return greenCheck;
}
set
{
if (greenCheck!= value)
{
greenCheck= value;
OnPropertyChanged();
}
}
}
这是我的 INotifyPropertyChanged 实现,它应该处理页面更新吗?
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
页面加载时一切都设置正确,单击选择也正确触发,并且 IsVisible 上的真/假也设置正确;但是,未选择的图像仍然保留在 graycheck 上,而不是应该显示的是 greencheck,graycheck 应该不再可见。
我在这里想念什么?蒂亚!瑞克...
解决方案
如果绑定工作正常,请不要使用/维护两个布尔变量灰色和绿色。如果一次只能看到一个。
按原样使用 greenCheckImage Xaml 并Data Trigger
用于 grayCheckImage
<Image x:Name="grayCheckImage" BackgroundColor="#F5E9E9" Source="GrayCheckmark.gif" Grid.Row="4" Grid.Column="2" HeightRequest="50" WidthRequest="50" HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand">
<DataTrigger TargetType="Image" Binding="{Binding GreenCheck}" Value="False">
<Setter Property="IsVisible" Value="True"/>
</DataTrigger>
<DataTrigger TargetType="Image" Binding="{Binding GreenCheck}" Value="True">
<Setter Property="IsVisible" Value="False"/>
</DataTrigger>
</Image>
你也可以converter
在多个地方写一个 if 。
推荐阅读
- .net - 使用 VB.NET (Visual Basic) 将文件上传到 SFTP 服务器
- android - Android Q - 从后台启动前台定位服务
- html - 如何使用 boostrap 对齐图标旁边的文本?
- docker - Docker Compose Nginx 在容器内无法使用同一容器的公共地址
- javascript - 从一个 HTML 页面输出到另一个
- c++ - C++ 文件 IO - ASCII 值而不是二进制值
- vue.js - 如何在 vuejs 中获取更新的 $refs
- hibernate - EntityNotfoundException - 休眠和 Springboot
- c# - RichTextBox appendtext 有时会添加额外的行?
- react-native - 加载不同场景时反应原生背景空白笔触