我遇到了这样一个场景:我在xaml视图中从我的viewmodel绑定到一个属性,其中VM属性可能为null。这会导致我的视图无法加载,因为我相信自己会收到NullReferenceException。
VM:
public class PersonDetailViewModel : ViewModelBase
{
public Person CurrentPerson
{
get => currentPerson;
set => SetProperty(ref currentPerson, value);
}
private Person currentPerson;
public bool IsBobsFriendsVisible => FriendNamedBob?.Friends?.Count > 0;
public Person FriendNamedBob => CurrentPerson?.Friends?.FirstOrDefault(x => x.Name == "Bob");
public PersonDetailViewModel()
{
CurrentPerson = new Person()
{
Name = "Henry",
Friends = new List<Person>() { new Person() { Name = "Rachel" } }
};
}
}
XAML:
<ContentPage>
<ContantPage.Content>
<StackLayout>
<Label Text="Bob's Friends Count:" IsVisible="{Binding IsBobsFriendsVisible}" />
<Label Text="{Binding FriendNamedBob.Friends.Count}" IsVisible="{Binding IsBobsFriendsVisible}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
由于FriendNamedBob
为空,因此此行显然是导致问题的原因:
<Label Text="{Binding FriendNamedBob.Friends.Count}" IsVisible="{Binding IsBobsFriendsVisible}" />
处理这种情况的推荐技术是什么?这是不良设计的征兆吗?
更新:
Xamarin.Lists https://github.com/xamarin/Xamarin.Forms/issues/1803似乎尚不支持FallBackValue
的各种类型(包括TargetNullValue
),而且在检查空https://bugzilla.xamarin.com/show_bug.cgi?id=57863
因此,这不是重复的(尚未)-在这种情况下,人们目前正在做什么?
答案 0 :(得分:0)
在这里,让我解释一下如何处理Xaml中的Null绑定。而且我使用相同的格式将对象列表绑定到xaml中,并且有效。
Public Class Person
{
Public Person()
{
}
int id=0;--- Here we are doing default Initialization of object to handle default null values
public int ID
{
get
{
return id;
}
set
{
id = value;
OnPropertyChanged();
}
}
string name="";--- Here we are doing default Initialization of object to handle default null values
public string Name
{
get
{
return name;
}
set
{
name = value;
OnPropertyChanged();
}
}
}
现在我们可以直接在XAML中绑定