C# Xamarin形成自定义ViewCell,don';如果为空,是否不添加到网格?

C# Xamarin形成自定义ViewCell,don';如果为空,是否不添加到网格?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我已经创建了一个自定义Viewcell,在这里我将文本绑定到标签,然后将其插入网格中。但是,如果传递给Viewcell的文本为空,如何避免空行?这只是部分代码,但如果文本为空,是否缺少某种绑定 public RouteElementsCustomCell() { Label NameLbl = new Label() { TextColor = Color.Black, HorizontalTextAlignment = TextAlignment

我已经创建了一个自定义Viewcell,在这里我将文本绑定到标签,然后将其插入网格中。但是,如果传递给Viewcell的文本为空,如何避免空行?这只是部分代码,但如果文本为空,是否缺少某种绑定

public RouteElementsCustomCell()
{
    Label NameLbl = new Label()
    {
        TextColor = Color.Black,
        HorizontalTextAlignment = TextAlignment.Center,
        FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label))
    };
    NameLbl.SetBinding(Label.TextProperty, "StopName");

    Grid grid = new Grid()
    {
        Padding = 10,
        RowDefinitions =
        {
            new RowDefinition
            {
                Height = GridLength.Auto
            },
        }
    };
    grid.Children.Add(NameLbl,0,1,0,1);
}

好的,这就是我在@IREAL的帮助下解决这个问题的方法


这可能会给viewmodel带来不必要的复杂性。考虑使用XAML值转换器,它将字符串转换成布尔值。然后您只需绑定IsVisible=“{Binding StopName,Converter={}}”,这非常有用,并允许您执行许多操作,包括基于字符串不为null或空的控件可见性-@irreal

将Label.IsVisibleProperty添加到标签,然后使用IValueConverter检查字符串是否为空、null或空白

标签

Label NameLbl = new Label()
{
    TextColor = Color.Black,
    HorizontalTextAlignment = TextAlignment.Center,
    VerticalOptions = LayoutOptions.Start,
    FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label))
};
NameLbl.SetBinding(Label.TextProperty, "StopName");
NameLbl.SetBinding(Label.IsVisibleProperty, "StopName",BindingMode.Default,new StringToBoolConverter(), null);
值转换器

public class StringToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string valueAsString = value.ToString();
        if (string.IsNullOrWhiteSpace(valueAsString))
        {
            return false;
        }
        else
        {
            return true;
        }

    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

我要做的是向我的对象添加公共属性:

public bool ShowItem { get{return !string.IsNullOrEmpty(StopName)};}

然后将IsVisibleProperty绑定到ShowItem

这可能会给viewmodel带来不必要的复杂性。考虑使用XAML值转换器,它将字符串转换成布尔值。然后您只需绑定IsVisible=“{Binding StopName,Converter={}}”,这非常有用,并允许您执行许多操作,包括基于字符串不为null或空的控件可见性。这不是正确的解决方案,因为如果您有一个对象的许多属性,您将不得不为您的对象添加多个bool。因此,正确的解决方法是使用iValueConverter,以避免代码重复。我不同意——一个bool可以检查对象的多个属性并返回一个结果。对我来说,这仍然是一个糟糕的解决方案。假设我有10个属性要在listview中显示,但我只想显示非空的属性。您将如何使用1 bool属性来验证这一点?