Xamarin.ios: строка для отображения пропущенного кода после .Split (",") - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение для iOS с Xamarin.ios MvvmCross. И я достиг, чтобы преобразовать строку в список с .Split(','). Теперь, когда я запускаю свой код и хочу видеть список в моем приложении. В первый раз, когда я нажимаю на элемент, ячейка просмотра пропустит код после запуска строки string[] namesArray = FavoriteContent.ingredients.Split(',');. Когда я вернусь к представлению таблицы и снова нажмите на ячейку просмотра. Он запустит код и отобразит список.

Код, который я показываю ниже, находится в моей viewmodel в проекте .Core. И я называю это в проекте de .IOS в de views.

Код для создания из строки списка и его возврата:

private string _ingredients;

    public string Ingredients
    {
        get
        {
            string[] namesArray = FavoriteContent.ingredients.Split(',');
            List<string> namesList = new List<string>(namesArray.Length);
            namesList.AddRange(namesArray);
            namesList.Reverse();
            _ingredients = string.Join("\n", namesList);
            return _ingredients;
        }
    }

Здесь я вызываю список из моих представлений в проекте .ios в проект .Core в моделях представления

ViewController (5-я строка, которую я называю списком):

MvxFluentBindingDescriptionSet<DetailFavoriteView, DetailFavoriteViewModel> set = new MvxFluentBindingDescriptionSet<DetailFavoriteView, DetailFavoriteViewModel>(this);
        set.Bind(NameRecipe).To(res => res.FavoriteContent.name);
        set.Bind(DetailImage).For(img => img.Image).To(res => res.FavoriteContent.thumbnail).WithConversion<StringToImageConverter>();
        set.Bind(DescriptionText).To(res => res.FavoriteContent.description);
        set.Bind(IngredientsList).To(res => res.Ingredients);
        set.Bind(ConditionText).To(res => res.Conditions);
        set.Bind(ButtonShopList).To(res => res.PostShopListCommand);
        set.Apply();

1 Ответ

0 голосов
/ 03 мая 2018

Поскольку FavoriteContent.ingredients равно null, в этой строке вы получите исключение FavoriteContent.ingredients.Split(',');, которое будет перехвачено в привязке, и поэтому ваша ячейка просмотра не будет отображать этот контент. Во второй раз ваш FavoriteContent.ingredients, безусловно, не равен нулю, поэтому он может обновить ячейку просмотра.

Так что я думаю, что вы должны просто добавить нулевую проверку перед выполнением вашей логики с FavoriteContent.ingredients, чтобы избежать исключения:

private string _ingredients;

public string Ingredients
{
    get
    {
        if (FavoriteContent?.ingredients == null) // IDK if FavoriteContent is a property or a class, I assumed is a property
            return null; // or return string.empty;

        string[] namesArray = FavoriteContent.ingredients.Split(',');
        List<string> namesList = new List<string>(namesArray.Length);
        namesList.AddRange(namesArray);
        namesList.Reverse();
        _ingredients = string.Join("\n", namesList);
        return _ingredients;
    }
}

А затем, когда вы загружаете FavoriteContent.ingredients, вы просто указываете представлению обновить эту привязку, используя RaisePropertyChanged:

// this is the part where you update FavoriteContent.ingredients in your ViewModel so that it is not null
FavoriteContent.ingredients = "my string, my other string, 2, 3";
RaisePropertyChanged(() => Ingredients); // you tell the view Ingredients has changed (make sure you are invoking this in your main thread if not use InvokeOnMainThread(() => RaisePropertyChanged(() => Ingredients));)

Е.И.В.

...