C# Xamarin形成自定义ViewCell,don';如果为空,是否不添加到网格?
我已经创建了一个自定义Viewcell,在这里我将文本绑定到标签,然后将其插入网格中。但是,如果传递给Viewcell的文本为空,如何避免空行?这只是部分代码,但如果文本为空,是否缺少某种绑定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
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属性来验证这一点?