Xamarin表单:如何处理flowlistview所选项目的可见性?
我在flowlistview中有一些图像,最初只显示问号图像。点击问号图像时,真实图像将可见,而不是问号图像。我已经像下面这样做了,但问题是,当点击时,所有真实的图像都是可见的,而不是选定的图像。我只需要在问号图像下显示真实图像 XAML 最初,我设置了ImageVisibility和TopImageVisibility值,如下所示:Xamarin表单:如何处理flowlistview所选项目的可见性?,listview,xamarin.forms,visibility,Listview,Xamarin.forms,Visibility,我在flowlistview中有一些图像,最初只显示问号图像。点击问号图像时,真实图像将可见,而不是问号图像。我已经像下面这样做了,但问题是,当点击时,所有真实的图像都是可见的,而不是选定的图像。我只需要在问号图像下显示真实图像 XAML 最初,我设置了ImageVisibility和TopImageVisibility值,如下所示: ImageVisibility = false; TopImageVisibility = true; 点击问号图像时,我更改了这些值将此代码添加到ShowMe
ImageVisibility = false;
TopImageVisibility = true;
点击问号图像时,我更改了这些值将此代码添加到ShowMemoryMatchImage上:
我只需要在问号图像下显示选定的图像,但所有图像都会显示。原因:似乎您将同一个源绑定到listView中每个项目的图像可见性。因此,当您更改属性的值时,所有项都将同时更改
解决方案:
您应该在模型中定义属性。检查以下代码 在xaml中 在视图模型中
请问,您以前是否可以尝试添加?似乎您在listView中绑定了每个项目的相同源TopImageVisibility。@LucasZhang MSFT我很快会给您一个示例,@LucasZhang MSFT是的,我在listView中绑定了每个项目的相同源TopImageVisibility,如何仅将绑定更改为选定项?您应该在模型中定义属性。您可以使用本地静态数据创建一个示例,我将在我这边测试它。
private bool _imagevisibility = false;
public bool ImageVisibility
{
protected set
{
if (_imagevisibility != value)
{
_imagevisibility = value;
OnPropertyChanged("ImageVisibility");
}
}
get { return _imagevisibility; }
}
private bool _topImageVisibility = false;
public bool TopImageVisibility
{
protected set
{
if (_topImageVisibility != value)
{
_topImageVisibility = value;
OnPropertyChanged("TopImageVisibility");
}
}
get { return _topImageVisibility; }
}
public ICommand ShowMemoryMatchImage
{
get
{
return new Command(async (e) =>
{
try
{
ImageVisibility = true;
TopImageVisibility = false;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>>" + ex);
}
});
}
}
ImageVisibility = false;
TopImageVisibility = true;
ImageVisibility = true;
TopImageVisibility = false;
<ffimageloading:CachedImage
Grid.Row="0"
Aspect="AspectFill"
IsVisible="{Binding ImageVisibility}"
Source="{Binding imageUrl, Converter={StaticResource urlJoinConverter}}">
//...
</ffimageloading:CachedImage>
<Image
Grid.Row="0"
Aspect="AspectFill"
IsVisible="{Binding TopImageVisibility}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Source="ic_memory_match_image.png">
//...
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding Path=BindingContext.ShowMemoryMatchImage,Source={x:Reference Name=MemoryMatchList}}"
CommandParameter="{Binding imageUrl}"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
public class NameMatchList : INotifyPropertyChanged
{
public string imageUrl { get; set; }
public string name { get; set; }
private Color bgColor;
public Color BGColor
{
set
{
if (value != null)
{
bgColor = value;
NotifyPropertyChanged();
}
}
get
{
return bgColor;
}
}
private bool _imagevisibility = false;
public bool ImageVisibility
{
set
{
if (_imagevisibility != value)
{
_imagevisibility = value;
NotifyPropertyChanged("ImageVisibility");
}
}
get { return _imagevisibility; }
}
private bool _topImageVisibility = false;
public bool TopImageVisibility
{
set
{
if (_topImageVisibility != value)
{
_topImageVisibility = value;
NotifyPropertyChanged("TopImageVisibility");
}
}
get { return _topImageVisibility; }
}
public NameMatchList()
{
ImageVisibility = false;
TopImageVisibility = true;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public ICommand ShowMemoryMatchImage
{
get
{
return new Command(async (e) =>
{
try
{
var path = e as string;
foreach (NameMatchList items in NameMatchImagItems)
{
if (items.imageUrl == path)
{
items.ImageVisibility = true;
items.TopImageVisibility = false;
}
else
{
items.ImageVisibility = false;
items.TopImageVisibility = true;
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Exception:>>" + ex);
}
});
}
}