Я добавил RefreshView
вместо CollectionView
. После добавления RefreshView
содержимое CollectionView
не отображается в пользовательском интерфейсе. Содержимое CollectionView
видно в пользовательском интерфейсе перед добавлением RefreshView
. Ниже приведен код:
<?xml version = "1.0" encoding = "utf-8" ?>
<ContentPage
xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
BackgroundColor = "White"
x:Class = "NeedHelp.Pages.FriendDetailsPage">
<ContentPage.Content>
<StackLayout>
<Grid BackgroundColor = "#eeeeee">
</Grid>
<ScrollView
x:Name = "frienddetails_scrollview"
IsVisible = "False"
Orientation = "Vertical"
VerticalOptions = "FillAndExpand"
HorizontalOptions = "FillAndExpand">
<StackLayout
Margin = "15">
<Frame
BorderColor = "#efefef"
BackgroundColor = "White"
CornerRadius = "5"
HasShadow = "False"
Padding = "5">
</Frame>
<Frame
BorderColor = "#efefef"
Padding = "3"
x:Name = "map_layout"
Margin = "0,5,0,0">
</Frame>
<Label
Margin = "0,5,0,0"
x:Name = "History_label"
Text = "History"
TextColor = "#424242"
HorizontalOptions = "Center"
HorizontalTextAlignment = "Center">
</Label>
<Frame
x:Name = "Tab_layout"
BorderColor = "#efefef"
Margin = "0,5,0,0"
BackgroundColor = "White"
HasShadow = "False"
CornerRadius = "5"
Padding = "5">
</Frame>
<ListView
x:Name = "historylistview"
SeparatorVisibility = "None"
HasUnevenRows = "True"
SelectionMode = "None"
CachingStrategy = "RecycleElement"
BackgroundColor = "#ffffff">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout
Margin = "0,0,0,10">
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Footer>
<Label/>
</ListView.Footer>
</ListView>
<RefreshView
IsRefreshing = "{Binding IsRefreshing}"
Command = "{Binding RefreshCommand}">
<CollectionView
x:Name = "MyTweetsList"
Margin = "0,5,0,5"
ItemsSource = "{Binding AllItems,Mode=TwoWay}"
RemainingItemsThreshold = "0"
RemainingItemsThresholdReached = "LoadMoreTweets"
HorizontalOptions = "Fill">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout
x:Name = "Item"
HorizontalOptions = "Fill"
VerticalOptions = "FillAndExpand"
Orientation = "Vertical">
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.HeightRequest>
<OnIdiom x:TypeArguments = "x:Double">
<OnIdiom.Phone>400</OnIdiom.Phone>
<OnIdiom.Tablet>600</OnIdiom.Tablet>
<OnIdiom.Desktop>400</OnIdiom.Desktop>
</OnIdiom>
</CollectionView.HeightRequest>
</CollectionView>
</RefreshView>
<Label
VerticalOptions = "CenterAndExpand"
HorizontalOptions = "CenterAndExpand"
IsVisible = "{Binding ComingSoonVisibility}"
HorizontalTextAlignment = "Center"
Text = "No Messages Yet."
x:Name = "no_announcement_label"/>
</StackLayout>
</ScrollView>
<Grid
x:Name = "tweetBox"
IsVisible = "False"
Margin = "0,0,0,10">
</Grid>
</StackLayout>
</ContentPage.Content>
</ContentPage>
public ICommand RefreshCommand
{
get
{
return new Command(async () =>
{
IsRefreshing = true;
LoadData();
IsRefreshing = false;
});
}
}
private bool _isRefreshing = false;
public bool IsRefreshing
{
get { return _isRefreshing; }
set
{
_isRefreshing = value;
OnPropertyChanged(nameof(IsRefreshing));
}
}
Нужно ли мне добавлять что-нибудь еще для просмотра данных в пользовательском интерфейсе при добавлении RefreshView
?
@JessieZhang-MSFT Проблема не в обновлении. При первой загрузке данные просмотра коллекции не отображаются в пользовательском интерфейсе.
Не могли бы вы опубликовать весь код .xaml
текущей страницы?
@JessieZhang-MSFT Я обновил вопрос со всей структурой пользовательского интерфейса, не могли бы вы проверить сейчас.
@JessieZhang-MSFT Я попробовал то же самое на новом демонстрационном проекте, и там он работает нормально. Но только в моем основном проекте это не работает, так что, должно быть, проблема в моей существующей структуре макета.
Да, это именно тот случай, как вы сказали.
Но в качестве обходного пути вы можете добавить StackLayout
снаружи RefreshView
и установить специальное значение для свойства HeightRequest
.
Вы можете обратиться к следующему коду:
<StackLayout BackgroundColor = "YellowGreen" HeightRequest = "200" VerticalOptions = "Fill" >
<RefreshView BackgroundColor = "Pink"
IsRefreshing = "{Binding IsRefreshing}"
Command = "{Binding RefreshCommand}">
<CollectionView
BackgroundColor = "LightBlue"
x:Name = "MyTweetsList"
Margin = "0,5,0,5"
ItemsSource = "{Binding Items,Mode=TwoWay}"
HorizontalOptions = "Fill">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout
x:Name = "Item"
HorizontalOptions = "Fill"
VerticalOptions = "FillAndExpand"
Orientation = "Vertical">
<Label Text = "{Binding Name}" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.HeightRequest>
<OnIdiom x:TypeArguments = "x:Double">
<OnIdiom.Phone>400</OnIdiom.Phone>
<OnIdiom.Tablet>600</OnIdiom.Tablet>
<OnIdiom.Desktop>400</OnIdiom.Desktop>
</OnIdiom>
</CollectionView.HeightRequest>
</CollectionView>
</RefreshView>
</StackLayout>
Примечание:
1. И есть известная проблема: CollectionView в RefreshView не отображается в ВертикальномStackLayout, но отображается в StackLayout, поэтому, пожалуйста, используйте StackLayout
, а не VerticalStackLayout
.
2. Не забудьте установить свойство IsVisible
внешнего ScrollView
на true
, иначе вы не увидите в нем ни одного представления.
<ScrollView
x:Name = "frienddetails_scrollview"
IsVisible = "False"
</ScrollView>
Но в моем коде нет вертикального стека.
Привет @MatthewPans, спасибо за ваш отзыв. Поскольку в настоящее время в этом отношении существуют связанные с этим проблемы, я просто сделал любезное напоминание в заметке. :)
Вы перепроверили, что данные загружаются правильно методом
LoadData();
?