Xamarin:在xaml中添加条件是可见的

2 xamarin.forms

我是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)

有人请建议一个有工作代码的解决方案.提前致谢

Ste*_*rne 5

您可以使用值转换器实现此目的

创建一个这样的转换器

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)


Ziy*_*dil 5

您还可以使用触发器

<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)