Xamarin Forms 乘以 CollectionViews Horizontal 和 Vertical
Xamarin Forms multiply CollectionViews Horizontal and Vertical
我尝试像这样在另一个 CollectionView 中使用一个 CollectionView。我的问题是那里不会像没有来源一样向我展示第二份简历。
我想 BindingContex 可能是问题所在,但我不知道如何解决它。
<CollectionView
SelectionMode="Single"
ItemsSource="{Binding MainInfo}">
<CollectionView.ItemsLayout>
<LinearItemsLayout ItemSpacing="10" Orientation="Vertical" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding UserName}"/>
<!--Horizontal CV-->
<CollectionView
SelectionMode="Single"
ItemsSource="{Binding MainInfo}"
>
<CollectionView.ItemsLayout>
<LinearItemsLayout ItemSpacing="10" Orientation="Horizontal" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding ImageUrl}"/>
<Label Text="{Binding FullName}"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
I guess the BindingContext can be the problem but i don't have a idea how i fix it.
在您的情况下,ItemsSource 和模型应该如下所示
public class MyDetails
{
public string ImageUrl { get; set; }
public string FullName { get; set; }
}
public class MyObject
{
public string UserName { get; set; }
public ObservableCollection<MyDetails> MainInfo { get; set; }
}
public class MyViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<MyObject> MainInfo { get; set; }
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
另外,同意@Jason。在你的情况下,如果想在单元格中显示一个集合,你可以使用 Bindable Layouts 而不是将 CollectionView 放在另一个 .这样你只需要像上面的代码一样设置Viewmodel和model。
我尝试像这样在另一个 CollectionView 中使用一个 CollectionView。我的问题是那里不会像没有来源一样向我展示第二份简历。 我想 BindingContex 可能是问题所在,但我不知道如何解决它。
<CollectionView
SelectionMode="Single"
ItemsSource="{Binding MainInfo}">
<CollectionView.ItemsLayout>
<LinearItemsLayout ItemSpacing="10" Orientation="Vertical" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding UserName}"/>
<!--Horizontal CV-->
<CollectionView
SelectionMode="Single"
ItemsSource="{Binding MainInfo}"
>
<CollectionView.ItemsLayout>
<LinearItemsLayout ItemSpacing="10" Orientation="Horizontal" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding ImageUrl}"/>
<Label Text="{Binding FullName}"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
I guess the BindingContext can be the problem but i don't have a idea how i fix it.
在您的情况下,ItemsSource 和模型应该如下所示
public class MyDetails
{
public string ImageUrl { get; set; }
public string FullName { get; set; }
}
public class MyObject
{
public string UserName { get; set; }
public ObservableCollection<MyDetails> MainInfo { get; set; }
}
public class MyViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<MyObject> MainInfo { get; set; }
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
另外,同意@Jason。在你的情况下,如果想在单元格中显示一个集合,你可以使用 Bindable Layouts 而不是将 CollectionView 放在另一个 .这样你只需要像上面的代码一样设置Viewmodel和model。