Xamarin.ios:在.Split(";,";)之后列出跳过代码的字符串

Xamarin.ios:在.Split(";,";)之后列出跳过代码的字符串,ios,string,listview,xamarin.ios,mvvmcross,Ios,String,Listview,Xamarin.ios,Mvvmcross,我正在用Xamarin.iOS MvvmCross构建一个iOS应用程序。我用.Split(',')完成了将字符串转换为列表的工作。现在,当我运行代码时,我想在我的应用程序中查看列表。第一次单击某个项目时,viewcell将在运行第行string[]namesArray=FavoriteContent.Components.Split(',')后跳过代码。当我返回表格视图并再次按下viewcell时。它将运行代码并显示列表 下面显示的代码在.Core项目的viewmodel中。我在de视图中的d

我正在用Xamarin.iOS MvvmCross构建一个iOS应用程序。我用
.Split(',')
完成了将字符串转换为列表的工作。现在,当我运行代码时,我想在我的应用程序中查看列表。第一次单击某个项目时,viewcell将在运行第行
string[]namesArray=FavoriteContent.Components.Split(',')后跳过代码。当我返回表格视图并再次按下viewcell时。它将运行代码并显示列表

下面显示的代码在.Core项目的viewmodel中。我在de视图中的de.IOS项目中调用它

从字符串生成列表并返回该列表的代码:

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;
        }
    }
private string\u;
公共弦成分
{
收到
{
string[]namesArray=FavoriteContent.Components.Split(',');
List namesList=新列表(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
_成分=string.Join(“\n”,名称列表);
返回原材料;
}
}
这是我从.ios项目中的视图调用列表到viewmodels中的.Core项目的地方

ViewController(我称之为列表的第5行):

MvxFluentBindingDescriptionSet=新的MvxFluentBindingDescriptionSet(此);
set.Bind(NameRecipe).To(res=>res.FavoriteContent.name);
set.Bind(DetailImage).For(img=>img.Image).To(res=>res.FavoriteContent.缩略图).WithConversion();
set.Bind(descriptionContext).To(res=>res.FavoriteContent.description);
set.Bind(IngredientsList).To(res=>res.components);
set.Bind(ConditionText).To(res=>res.Conditions);
set.Bind(ButtonShopList).To(res=>res.PostShopListCommand);
set.Apply();

因为
FavoriteContent.Components
null
这一行
FavoriteContent.Components.Split(',')会出现异常将在绑定中捕获,因此viewcell不会显示该内容。第二次时,您的
FavoriteContent.Components
肯定不是空的,因此它可以更新viewcell

因此,我认为您应该在使用
FavoriteContent.Components
执行逻辑之前添加一个空检查,以避免出现异常:

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

您好,您能告诉我们IngCreditsList是什么吗?似乎您正在尝试将listview绑定到字符串值。IngredientsList只引用main.storyboard中的标签。在配料后面还有一个字符串,我把每个单词都放在一个字符串下面,带“\n”的是
FavoriteContent。配料
null当您第一次单击viewcell中的某个项目时?是的,FavoriteContent.配料为null
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;
    }
}
// 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));)