Xamarin表单中的ListView数据绑定

时间:2017-06-10 22:00:17

标签: xamarin xamarin.forms

登录或导航到任何页面,从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();
        }
    } 

我想摆脱额外按钮

2 个答案:

答案 0 :(得分:0)

在OnAppearing方法中获取数据

void async override OnAppearing() 
{
   // call VM GetData method
}

答案 1 :(得分:0)

正如我从这些小代码片段中看到的那样,您提供的内容以及我可以得出的结论......您将ListView绑定到某些ListObservableCollection,并且当Command被“触发”时(在按钮上单击)您正在调用WebApi。

删除按钮的使用:您可以在调用web api的地方使用该代码,并且将其放在ViewModel构造函数中,因此在这种情况下,您可以轻松使用Web在创建ViewModel时会自动调用Api,您的ListObservableCollection将被填充,如果您以正确的方式“尊重”MVVM,您的ListView将会正确更新来自api的数据。


这是我的观点,这种方法会起作用,社区的问题是:“这样做是不是一个好习惯?”......但正如我所说,这对你有用,你会不需要Button

P.S。下次包括所有与小方法无关的课程,当您包含所有代码时,我们可以看到您拥有的情况,我们可以帮助您