Xamarin Forms MVVM - проверить исходные данные на пустое в просмотре списка - PullRequest
0 голосов
/ 09 сентября 2018

Я адаптировал некоторый пример кода для отображения списка и чтобы он работал для моих целей. Однако некоторые из исходных данных являются пустыми, что создает пустую строку, например, Spouse2 часто является пустым. Я хотел бы проверить на пустое и не генерировать строку. В частности, как я могу проверить исходные данные, полученные с помощью этого оператора s2Label.SetBinding(Label.TextProperty, new Binding("Spouse2")); в классе CustomTreeBranches, чтобы обойти vlayout.Children.Add(s2Label); заявление?

Вот классы:

public partial class MainView : ContentPage
    {
        public ObservableCollection<Models.TreeBranches> branches { get; set; }
        public MainView()
        {
            InitializeComponent();
            branches = new ObservableCollection<Models.TreeBranches>();
            ListView viewList = new ListView();
            this.Title = "Family Tree";
            viewList.ItemTemplate = new DataTemplate(typeof(CustomTreeBranches));
            branches.Add(new Models.TreeBranches {
                BranchNumber = 1,
                FullName = "Melvin Sneerd",
                Birthday ="1/22/1982",
                Father = "Dick Sneerd",
                Mother = "Hazel Haze",
                Spouse1 = "Lucky Lady",
                Spouse2 = "",
                Spouse3 = "",
                Child1 = "John Sneerd",
                Child2 = "Donna Sneerd",
                Child3 = "",
                Child4 = "",
                Residence = "Malibu, California",
                Image = "Photos/filler.jpg" });
            branches.Add(new Models.TreeBranches {
                BranchNumber = 2,
                FullName = "Lucky Lady",
                Birthday ="11/31/1980",
                Father = "Papa Joe",
                Mother = "Mama Bear",
                Spouse1 = "Melvin Sneerd",
                Spouse2 = "",
                Spouse3 = "",
                Child1 = "John Sneerd",
                Child2 = "Donna Sneerd",
                Child3 = "",
                Child4 = "",
                Residence = "Highlands Ranch, Colorado",
                Image = "Photos/fill.jpg" })
public class CustomTreeBranches : ViewCell 
            {
            public CustomTreeBranches()
            {
                var img = new Image();
                var bdLabel = new Label();
                var nameLabel = new Label();
                var bnLabel = new Label();
                var frLabel = new Label();
                var mrLabel = new Label();
                var c1Label = new Label();
                var c2Label = new Label();
                var c3Label = new Label();
                var c4Label = new Label();
                var s1Label = new Label();
                var s2Label = new Label();
                var s3Label = new Label();
                var rdLabel = new Label();
                var sp0Label = new Label()
                {
                    Text = "Branch Member",
                    FontAttributes = FontAttributes.Bold,
                    HorizontalOptions = LayoutOptions.Center
                };
                    var sp1Label = new Label()
                {
                    Text = "Father and Mother",
                    FontAttributes = FontAttributes.Bold,
                    HorizontalOptions = LayoutOptions.Center
                };
                var sp2Label = new Label()
                {
                    Text = "Children",
                    FontAttributes = FontAttributes.Bold,
                    HorizontalOptions = LayoutOptions.Center
                }; 
                var sp3Label = new Label()
                {
                    Text = "Spouse(s)",
                    FontAttributes = FontAttributes.Bold,
                    HorizontalOptions = LayoutOptions.Center
                }; 
                var sp4Label = new Label()
                {
                    Text = "Latest Residence",
                    FontAttributes = FontAttributes.Bold,
                    HorizontalOptions = LayoutOptions.Center
                }; 
                var vLayout = new StackLayout();
                var hLayout = new StackLayout() { BackgroundColor = Color.LavenderBlush };
                img.SetBinding(Image.SourceProperty, new Binding("Image"));
                bdLabel.SetBinding(Label.TextProperty, new Binding("Birthday"));
                nameLabel.SetBinding(Label.TextProperty, new Binding("FullName"));
                //bnLabel.SetBinding(Label.TextProperty, new Binding("BranchNumber"));                
                frLabel.SetBinding(Label.TextProperty, new Binding("Father"));
                mrLabel.SetBinding(Label.TextProperty, new Binding("Mother"));
                c1Label.SetBinding(Label.TextProperty, new Binding("Child1"));
                c2Label.SetBinding(Label.TextProperty, new Binding("Child2"));
                c3Label.SetBinding(Label.TextProperty, new Binding("Child3"));
                c4Label.SetBinding(Label.TextProperty, new Binding("Child4"));
                s1Label.SetBinding(Label.TextProperty, new Binding("Spouse1"));
                s2Label.SetBinding(Label.TextProperty, new Binding("Spouse2"));
                s3Label.SetBinding(Label.TextProperty, new Binding("Spouse3"));
                rdLabel.SetBinding(Label.TextProperty, new Binding("Residence"));
                hLayout.Orientation = StackOrientation.Horizontal;
                hLayout.HorizontalOptions = LayoutOptions.Fill;
                img.HorizontalOptions = LayoutOptions.End;
                img.WidthRequest = 250;
                img.HeightRequest = 250;
                nameLabel.FontSize = 18;

                vLayout.Children.Add(sp0Label);
                vLayout.Children.Add(nameLabel);
                vLayout.Children.Add(bdLabel);
                //vLayout.Children.Add(bnLabel);
                vLayout.Children.Add(sp1Label);
                vLayout.Children.Add(frLabel);
                vLayout.Children.Add(mrLabel);
                vLayout.Children.Add(sp2Label);
                vLayout.Children.Add(c1Label);
                vLayout.Children.Add(c2Label);
                vLayout.Children.Add(c3Label);
                vLayout.Children.Add(c4Label);
                vLayout.Children.Add(sp3Label);
                vLayout.Children.Add(s1Label);
                vLayout.Children.Add(s2Label);
                vLayout.Children.Add(s3Label);            
                vLayout.Children.Add(sp4Label);
                vLayout.Children.Add(rdLabel);
                hLayout.Children.Add(vLayout);
                hLayout.Children.Add(img);
                View = hLayout;
            }
        }
    }
}

1 Ответ

0 голосов
/ 09 сентября 2018

Я бы порекомендовал добавить новую привязку к свойству IsVisible метки, а затем использовать преобразователь значения для переключения видимости, что-то вроде s2Label.SetBinding(IsVisibleProperty, "Spouse2", BindingMode.Default, new MyValueConverter());, где ваш преобразователь значения может выглядеть примерно так:

public class MyValueConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var myString = value as string;
        return (myString == null) ? false : !string.IsNullOrWhiteSpace(myString);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...