Xamarin 不在同一页面中显示来自第二个 CollectionView 的内容
Posted
技术标签:
【中文标题】Xamarin 不在同一页面中显示来自第二个 CollectionView 的内容【英文标题】:Xamarin does not display content from the second CollectionView in the same page 【发布时间】:2021-03-30 11:31:06 【问题描述】:我的想法是:两个 CollectionView 的一页,其中一个不显示内容。 主 CollectionView 是垂直的。第二个是水平的,是第一个的一部分。
我的步骤: API 响应工作正常。我正确接收到 JSON 格式的数据。
[
"userName": "User1",
"imageUrl": "database//icon-library.com/images/default-profile-icon/default-profile-icon-24.jpg",
"age": 33,
"atractive": 0,
"partyMood": 0,
"fame": 0,
"friendly": 0,
"drinkMood": 0,
"party_Id": 1,
"description": "Party 1",
"memberNumber": 10,
"member": [
"id": 1,
"fK_Party_Id": 1,
"partys": null,
"user_id": 3,
"member_Gender": "male",
"member_Age": 33,
"member_UserName": "User3",
"member_FirstName": "Vorname",
"member_LastName": "Nachname",
"member_ImageUrl": "https://icon-library.com/images/default-profile-icon/default-profile-icon-24.jpg",
"member_ImageFrame": null,
"member_Attractive": 0,
"member_PartyMood": 0,
"member_Fame": 0,
"member_Friendly": 0,
"member_DrinkMood": 0
],
"item_Bottle": 0,
"item_Table": 0,
"item_GuestList": 0,
"partyImageUrl": "https://joinapiazure.azurewebsites.net/\\fdc1d73c-fd20-441b-849c-b88164fc485a.jpg",
"location_Party": null,
"start_Party": "2020-12-20T04:00:00",
"end_Party": "2020-12-20T05:00:00"
,
"userName": "User2",
"imageUrl": "database/icon-library.com/images/default-profile-icon/default-profile-icon-24.jpg",
"age": 33,
"atractive": 0,
"partyMood": 0,
"fame": 0,
"friendly": 0,
"drinkMood": 0,
"party_Id": 2,
"description": "Party 2",
"memberNumber": 10,
"member": [
"id": 2,
"fK_Party_Id": 2,
"partys": null,
"user_id": 4,
"member_Gender": "male",
"member_Age": 33,
"member_UserName": "User4",
"member_FirstName": "Vorname",
"member_LastName": "Nachname",
"member_ImageUrl": "https://icon-library.com/images/default-profile-icon/default-profile-icon-24.jpg",
"member_ImageFrame": null,
"member_Attractive": 0,
"member_PartyMood": 0,
"member_Fame": 0,
"member_Friendly": 0,
"member_DrinkMood": 0
],
"item_Bottle": 0,
"item_Table": 0,
"item_GuestList": 0,
"partyImageUrl": "database\\f1d1fe71-99ed-49dc-a0f2-1a388cdb6099.jpg",
"location_Party": null,
"start_Party": "2020-12-20T04:00:00",
"end_Party": "2020-12-20T05:00:00"
]
-
在第一个 CollectionView 中显示派对(垂直)(工作正常) ItemSource=Binding AllParty
3 在第二个CollectionView中显示党员(水平)(不起作用)
ItemSource=绑定成员
如果我给第二个 collectionView 一个独立的来源,它工作正常
它只是不显示成员子列表。当我在调试模式下启动整个过程时,我注意到该值没有传递给私有属性。
我的 Xamal:
<CollectionView Grid.Row="0"
ItemsSource="Binding AllParty"
SelectionMode="Single"
SelectionChangedCommand="Binding Placeholder, Mode=TwoWay"
SelectedItem="Binding SelectItem"
>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Margin="0,10,0,0"
RowSpacing="0"
ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="25" />
<RowDefinition Height="150" />
<RowDefinition Height="320" />
</Grid.RowDefinitions>
<Frame BackgroundColor="LightGray"
BorderColor="LightGray"
CornerRadius="10"
HasShadow="True"
Grid.Row="1"
Grid.RowSpan="3">
</Frame>
<Image Source="Binding PartyImageUrl"
Grid.Row="0"
Aspect="AspectFill" />
<StackLayout Margin="0,5,0,0"
Grid.Row="1">
<Label FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Center"
Text="Binding UserName" />
</StackLayout>
<StackLayout Margin="5,5,0,0"
Orientation="Horizontal"
Grid.Row="2">
<Image Source="Binding ImageUrl"
Aspect="AspectFill"
Background="black"
HeightRequest="150"
WidthRequest="150" />
<StackLayout Orientation="Vertical">
<Label Text="Binding Age, StringFormat='Alter: 0'" />
<Label Text="Binding Attractive, StringFormat='Attraktivität: 0'" />
<Label Text="Binding PartyMood, StringFormat='Stimmungsanreger: 0'" />
<Label Text="Binding Fame, StringFormat='Bekanntheit: 0'" />
<Label Text="Binding Friendly, StringFormat='Freundlich: 0'" />
<Label Text="Binding DrinkMood, StringFormat='Trinklust: 0'" />
</StackLayout>
</StackLayout>
<StackLayout Spacing="10"
Margin="10,0,0,0"
Grid.Row="3"
Orientation="Vertical">
<Label Margin="0,10,0,0" Text="Binding Description, StringFormat='Beschreibung: 0'" />
<StackLayout Orientation="Vertical">
<CollectionView ItemsSource="Binding Member"
ItemsLayout="HorizontalList"
xmlns:model="clr-namespace:JoinAPP.VievModel.Party"
SelectionMode="Single"
SelectionChangedCommand="Binding Placeholder, Mode=TwoWay">
<CollectionView.BindingContext>
<model:PartyModelViewModel/>
</CollectionView.BindingContext>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Vertical"
Padding="5">
<Image Source="Binding Member_ImageUrl"
Aspect="AspectFill"
Background="black"
HeightRequest="75"
WidthRequest="75" />
<Label FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Center"
Text="Binding Member_UserName" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
<Label Text="Binding Item_Bootle, StringFormat='Verfügbare Flaschen: 0'" />
<Label Text="Binding Item_Table, StringFormat='Verfügbare Tische: 0'" />
<Label Text="Binding Item_GuestList, StringFormat='Verfügbare Gästelisteplätze: 0'" />
<Label Text="Binding Location_Party, StringFormat='Location: 0'" />
<Label Text="Binding Start_Party, StringFormat='Start: 0: dd.MM.yy hh:mm tt'" />
<Label Text="Binding End_Party, StringFormat='End: 0: dd.MM.yy hh:mm tt '" />
</StackLayout>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我的模型视图
public class PartyModelViewModel : MemberModel
public PartyModelViewModel()
RefreshCommand = new Command(GetParty);
//// selectUser = new Command(async () =>
//
// var Id = SelectItem.Id;
// Preferences.Set("CV_PartyId", Id);
// await Application.Current.MainPage.Navigation.PushAsync(new ProfilePage());
// );
GetParty();
//GetAllMember();
PartyCollection = new ObservableCollection<PartyModel>();
//MemberCollection = new ObservableCollection<MemberModel>();
public ObservableCollection<PartyModel> PartyCollection;
//public ObservableCollection<MemberModel> MemberCollection;
public ICommand RefreshCommand get;
public ICommand SelectUser get; set;
private async void GetParty()
if (AllParty == null)
var allParty = await PartyService.GetAllParty();
foreach (var party in allParty)
PartyCollection.Add(party);
AllParty = PartyCollection;
else
PartyCollection.Clear();
var allParty = await PartyService.GetAllParty();
foreach (var party in allParty)
PartyCollection.Add(party);
AllParty = PartyCollection;
IsRefreshing = false;
//private async void GetAllMember()
//
// if (AllMember == null)
//
// var allMember = await PartyService.GetAllMember();
// foreach (var member in allMember)
//
// MemberCollection.Add(member);
//
// AllMember = MemberCollection;
//
// else
//
// MemberCollection.Clear();
// if (AllMember == null)
//
// var allMember = await PartyService.GetAllMember();
// foreach (var member in allMember)
//
// MemberCollection.Add(member);
//
// AllMember = MemberCollection;
//
// IsRefreshing = false;
//
//
private bool _isRefreshing;
public bool IsRefreshing
get => _isRefreshing;
set => SetPorperty(ref _isRefreshing, value);
private UserModel _userSelectItem;
public UserModel UserSelectItem
get => _userSelectItem;
set => SetPorperty(ref _userSelectItem, value);
private PartyModel _selectItem;
public PartyModel SelectItem
get => _selectItem;
set => SetPorperty(ref _selectItem, value);
private ObservableCollection<PartyModel> _allParty;
public ObservableCollection<PartyModel> AllParty
get => _allParty;
set => SetPorperty(ref _allParty, value);
//private ObservableCollection<MemberModel> _allMember;
//public ObservableCollection<MemberModel> AllMember
//
// get => _allMember;
// set => SetPorperty(ref _allMember, value);
//
我的模型
public class PartyModel : UserModel
private ImageSource _partyProfileImage;
public ImageSource PartyProfileImage
get => _partyProfileImage;
set => SetPorperty(ref _partyProfileImage, value);
private int _party_Id;
public int Party_Id
get => _party_Id;
set => SetPorperty(ref _party_Id, value);
//Party Bereich
private double _fK_User_Id;
public double FK_User_Id
get => _fK_User_Id;
set => SetPorperty(ref _fK_User_Id, value);
private string _description;
public string Description
get => _description;
set => SetPorperty(ref _description, value);
private int _memberNumber;
public int MemberNumber
get => _memberNumber;
set => SetPorperty(ref _memberNumber, value);
private List<MemberModel> _member;
public List<MemberModel> Member
get => _member;
set => SetPorperty(ref _member , value);
private int _item_Bottle;
public int Item_Bootle
get => _item_Bottle;
set => SetPorperty(ref _item_Bottle, value);
private int _item_Table;
public int Item_Table
get => _item_Table;
set => SetPorperty(ref _item_Table, value);
private int _item_GuestList;
public int Item_GuestList
get => _item_GuestList;
set => SetPorperty(ref _item_GuestList, value);
//private byte[] _imageArray;
//public byte[] ImageArray
//
// get => _imageArray;
// set => SetPorperty(ref _imageArray, value);
//
private string _partyImageUrl;
public string PartyImageUrl
get => _partyImageUrl;
set => SetPorperty(ref _partyImageUrl, value);
private string _location_Party;
public string Location_Party
get => _location_Party;
set => SetPorperty(ref _location_Party, value);
private DateTime _start_Party;
public DateTime Start_Party
get => _start_Party;
set => SetPorperty(ref _start_Party, value);
private DateTime _end_Party;
public DateTime End_Party
get => _end_Party;
set => SetPorperty(ref _end_Party, value);
private TimeSpan _timespan_Party;
public TimeSpan Timespan_Party
get => _timespan_Party;
set => SetPorperty(ref _timespan_Party, value);
public class MemberModel : PartyModel
//private int _Id;
//public int Id
//
// get => _Id;
// set => SetPorperty(ref _Id, value);
//
private int _fK_Party_Id;
public int FK_Party_Id
get => _fK_Party_Id;
set => SetPorperty(ref _fK_Party_Id, value);
private int _user_id;
public int User_id
get => _user_id;
set => SetPorperty(ref _user_id, value);
private string _memberGender;
public string Member_Gender
get => _memberGender;
set => SetPorperty(ref _memberGender, value);
private int _member_Age;
public int Member_Age
get => _member_Age;
set => SetPorperty(ref _member_Age, value);
private string _member_UserName;
public string Member_UserName
get => _member_UserName;
set => SetPorperty(ref _member_UserName, value);
private string _member_FirstName;
public string Member_FirstName
get => _member_FirstName;
set => SetPorperty(ref _member_FirstName, value);
private string _member_LastName;
public string Member_LastName
get => _member_LastName;
set => SetPorperty(ref _member_LastName, value);
private string _member_ImageUrl;
public string Member_ImageUrl
get => _member_ImageUrl;
set => SetPorperty(ref _member_ImageUrl, value);
// Ranking
private string _member_ImageFrame;
public string Member_ImageFrame
get => _member_ImageFrame;
set => SetPorperty(ref _member_ImageFrame, value);
// Rating
private double _member_Attractive;
public double Member_Attractive
get => _member_Attractive;
set => SetPorperty(ref _member_Attractive, value);
private double _member_PartyMood;
public double Member_PartyMood
get => _member_PartyMood;
set => SetPorperty(ref _member_PartyMood, value);
private double _member_Fame;
public double Member_Fame
get => _member_Fame;
set => SetPorperty(ref _member_Fame, value);
private double _member_Friendly;
public double Member_Friendly
get => _member_Friendly;
set => SetPorperty(ref _member_Friendly, value);
private double _member_DrinkMood;
public double Member_DrinkMood
get => _member_DrinkMood;
set => SetPorperty(ref _member_DrinkMood, value);
//protected bool SetPorperty<T>(ref T storge, T value, [CallerMemberName] string propertyName = null)
//
// if (EqualityComparer<T>.Default.Equals(storge, value))
//
// return false;
//
// storge = value;
// OnPropertyChanged(propertyName);
// return true;
//
【问题讨论】:
据我所知,Xamarin.Forms 不支持嵌套的 CollectionViews,我建议你可以使用Collectionview grouping 来做到这一点。 【参考方案1】:在另一个 CollectionView 中插入一个 CollectionView 不是一个好的设计。在您的情况下,您可以使用 Bindable Layout 。
在xml中
<CollectionView Grid.Row="0"
ItemsSource="Binding AllParty"
SelectionMode="Single"
SelectionChangedCommand="Binding Placeholder, Mode=TwoWay"
SelectedItem="Binding SelectItem"
>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Margin="0,10,0,0"
RowSpacing="0"
ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="25" />
<RowDefinition Height="150" />
<RowDefinition Height="320" />
</Grid.RowDefinitions>
<Frame BackgroundColor="LightGray"
BorderColor="LightGray"
CornerRadius="10"
HasShadow="True"
Grid.Row="1"
Grid.RowSpan="3">
</Frame>
<Image Source="Binding PartyImageUrl"
Grid.Row="0"
Aspect="AspectFill" />
<StackLayout Margin="0,5,0,0"
Grid.Row="1">
<Label FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Center"
Text="Binding UserName" />
</StackLayout>
<StackLayout Margin="5,5,0,0"
Orientation="Horizontal"
Grid.Row="2">
<Image Source="Binding ImageUrl"
Aspect="AspectFill"
Background="black"
HeightRequest="150"
WidthRequest="150" />
<StackLayout Orientation="Vertical">
<Label Text="Binding Age, StringFormat='Alter: 0'" />
<Label Text="Binding Attractive, StringFormat='Attraktivität: 0'" />
<Label Text="Binding PartyMood, StringFormat='Stimmungsanreger: 0'" />
<Label Text="Binding Fame, StringFormat='Bekanntheit: 0'" />
<Label Text="Binding Friendly, StringFormat='Freundlich: 0'" />
<Label Text="Binding DrinkMood, StringFormat='Trinklust: 0'" />
</StackLayout>
</StackLayout>
<StackLayout Spacing="10"
Margin="10,0,0,0"
Grid.Row="3"
Orientation="Vertical">
<Label Margin="0,10,0,0" Text="Binding Description, StringFormat='Beschreibung: 0'" />
<ScrollView Orientation="Vertical" >
<StackLayout Orientation="Vertical" BindableLayout.ItemsSource="Binding Member">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout HeightRequest="100" WidthRequest="100" Orientation="Vertical" Padding="5">
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Command="Binding Placeholder, Mode=TwoWay" />
</StackLayout.GestureRecognizers>
<Image Source="Binding Member_ImageUrl"
Aspect="AspectFill"
Background="black"
HeightRequest="75"
WidthRequest="75" />
<Label FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Center"
Text="Binding Member_UserName" />
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
<Label Text="Binding Item_Bootle, StringFormat='Verfügbare Flaschen: 0'" />
<Label Text="Binding Item_Table, StringFormat='Verfügbare Tische: 0'" />
<Label Text="Binding Item_GuestList, StringFormat='Verfügbare Gästelisteplätze: 0'" />
<Label Text="Binding Location_Party, StringFormat='Location: 0'" />
<Label Text="Binding Start_Party, StringFormat='Start: 0: dd.MM.yy hh:mm tt'" />
<Label Text="Binding End_Party, StringFormat='End: 0: dd.MM.yy hh:mm tt '" />
</StackLayout>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
这是一个similar issue,您可以参考一下。
【讨论】:
以上是关于Xamarin 不在同一页面中显示来自第二个 CollectionView 的内容的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms - oxyplot 不在 CollectionView 内显示
Xamarin Forms Shell 不在详细信息页面上显示菜单栏
DisplayAlert不在Xamarin上显示仅表示ios