我是xamarin的新手,我在我的xamarin表单项目中遇到了一个问题.我有一个内部listview-viewcell,有250宽度和高度.有时,mediaUrl的值为null.我想隐藏Image为null mediaUrl值,并使其他值可见.我的问题是如果mediaUrl的值为null,则显示UI中的空白.里面的isVisible属性如何应用这个条件?我的代码如下:
<StackLayout>
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Image
WidthRequest="250"
HeightRequest="250"
Source="{Binding mediaUrl}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
有人请建议一个有工作代码的解决方案.提前致谢
您可以使用值转换器实现此目的
创建一个这样的转换器
public class NullToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
如果值为null,则返回false
像这样在你的页面中注册它
<ContentPage.Resources>
<ResourceDictionary>
<local:NullToBoolConverter x:Key="NullToBoolConverter"/>
</ResourceDictionary>
</ContentPage.Resources>
Run Code Online (Sandbox Code Playgroud)
然后像这样添加它
<StackLayout>
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Image
WidthRequest="250"
HeightRequest="250"
Source="{Binding mediaUrl}"
IsVisible={Binding mediaUrl, Converter={StaticResource NullToBoolConverter}/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
您还可以使用触发器
<Image.Triggers>
<DataTrigger TargetType="Image" Binding="{Binding isMediaUrlNull}" Value="True">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Image.Triggers>
Run Code Online (Sandbox Code Playgroud)
编辑
您还可以在模型中添加属性isMediaUrlNull并尝试上面的代码
public bool isMediaUrlNull {get {return !string.IsNullOrEmpty(mediaUrl);}}
<Image WidthRequest="250" HeightRequest="250" IsVisible="{Binding mediaUrl}" Source="{Binding mediaUrl}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |