登录或导航到任何页面,从API获取数据时,我使用额外的按钮(显示社区)来获取我的获取数据。这是我的代码
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:epolleasy.ViewModels;assembly=epolleasy"
x:Class="epolleasy.Views.DpCommunities">
<ContentPage.BindingContext>
<viewModels:DashboardViewModel />
</ContentPage.BindingContext>
<StackLayout>
<Button Command="{Binding GetDashboard}" Text="Show Communities"/>
<ListView ItemsSource="{Binding UserDashboard.Com}"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding CommunityName}"/>
<Label Text="{Binding CommunityUsers.Count}"/>
<Label Text="{Binding FormsCommunity.Count}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
以下是我的ViewModel中的 GetDashboard 命令
public ICommand GetDashboard
{
get
{
return new Command(async () =>
{
var accessToken = Settings.AccessToken;
UserDashboard = await _apiServices.GetDashboard(accessToken);
});
}
}
以下是同一视图模型中的 UserDashboard 。
public Dashboard UserDashboard
{
get { return _userDashboard; }
set
{
_userDashboard = value;
OnPropertyChanged();
}
}
我想摆脱额外按钮。
答案 0 :(得分:0)
在OnAppearing方法中获取数据
void async override OnAppearing()
{
// call VM GetData method
}
答案 1 :(得分:0)
正如我从这些小代码片段中看到的那样,您提供的内容以及我可以得出的结论......您将ListView绑定到某些List
或ObservableCollection
,并且当Command被“触发”时(在按钮上单击)您正在调用WebApi。
删除按钮的使用:您可以在调用web api的地方使用该代码,并且将其放在ViewModel构造函数中,因此在这种情况下,您可以轻松使用Web在创建ViewModel时会自动调用Api,您的List
或ObservableCollection
将被填充,如果您以正确的方式“尊重”MVVM,您的ListView
将会正确更新来自api的数据。
这是我的观点,这种方法会起作用,社区的问题是:“这样做是不是一个好习惯?”......但正如我所说,这对你有用,你会不需要Button
。
P.S。下次包括所有与小方法无关的课程,当您包含所有代码时,我们可以看到您拥有的情况,我们可以帮助您