2016-06-03 4 views
0

Я создал пользовательскую Viewcell, где я привязываю текст к метке, а затем вставляю ее в сетку. Однако как избежать пустых строк, если текст, который я передаю в Viewcell, пуст? Это всего лишь часть кода, но есть ли какие-то привязки, которых я пропускаю, если текст пуст?Xamarin Forms Custom 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); 
} 

ответ

0

Хорошо, так я решил эту проблему с помощью @irreal.

Это, вероятно, представляет ненужную сложность для вашей модели. Подумайте об использовании конвертера значений xaml, который преобразует строку в boolean. Затем вы просто связываете IsVisible = «{Binding StopName, Converter = {}}« Это очень полезно и позволит вам делать много вещей, в том числе контроль видимости на основе строки, не пустой или пустой, - @irreal

Добавил Label.IsVisibleProperty к метке, а затем использовал IValueConverter, чтобы проверить, была ли строка пустой, пустой или пробельной.

Этикетка

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

ValueConverter

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; 
    } 
} 
+1

Это, вероятно, представляет ненужную сложность для вашей модели. Подумайте об использовании конвертера значений xaml, который преобразует строку в boolean. Затем вы просто привязываете IsVisible = "{Binding StopName, Converter = {<ваш настраиваемый преобразователь значений>}}« Это очень полезно и позволит вам делать много вещей, в том числе контроль видимости на основе строки, не являющейся нулевой или пустой , – irreal

-1

Что я хотел бы сделать, это добавить общественную собственность к моему объекту:

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

Затем связать IsVisibleProperty к ShowItem

+0

Неправильное решение, потому что вы добавили бы несколько объектов для вашего объекта, если у вас много свойств для объекта. Поэтому правильный способ его решения - использовать iValueConverter, чтобы избежать дублирования кода. –

+0

Я не согласен - один bool мог проверять несколько свойств объекта и возвращать один результат. – Christine

+0

Это по-прежнему звучит как плохое решение для меня. Представьте, что у меня есть 10 свойств, которые я хочу показать в listview, но я хочу показать свойства, которые не являются пустыми. Как вы подтвердите это с помощью 1 свойства bool? –

Смежные вопросы