2017-06-23 62 views
0

在登錄或導航到儀表板頁面時,從API獲取數據時,我使用額外的按鈕(顯示社區)來獲取我的抓取我的數據。這裏是我的代碼在Xamarin Forms中使用ListView數據綁定而不使用GetDashboard按鈕

<StackLayout BackgroundColor="#30af91" Padding="60" VerticalOptions="Center"> 

<Entry Text="{Binding Username}" Placeholder="Username"/> 
<Entry Text="{Binding Password}" IsPassword="True" Placeholder="Password"/> 

<Button Command="{Binding LoginCommand}" Text="Login" Clicked="Button_OnClicked"/> 

</StackLayout> 

Button_OnClicked僅定位到儀表板

private async void Button_OnClicked(object sender, EventArgs e) 
    { 
     await Navigation.PushModalAsync(new Dashboard()); 
    } 

在LoginViewModel LoginCommand

public ICommand LoginCommand 
    { 
     get 
     { 
      return new Command(async() => 
      { 
       var accesstoken = await _apiServices.LoginAsync(Username, Password); 
       Settings.AccessToken = accesstoken; 
      }); 
     } 
    } 

這裏是我的儀表板

<MasterDetailPage 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.Dashboard"> 

<MasterDetailPage.Master> 

    <ContentPage Title="Menu"> 

     <ContentPage.BindingContext> 
      <viewModels:DashboardViewModel /> 
     </ContentPage.BindingContext> 

     <ContentPage.Content> 
     <StackLayout> 

      <Button x:Name="BtnActiveForm" Text="Active Forms" Clicked="BtnActiveForm_OnClicked"></Button> 
      <Button x:Name="BtnCommunity" Text="My Communities" Clicked="BtnCommunity_OnClicked"></Button> 
      <Button x:Name="BtnHistory" Text="Sealed Forms" Clicked="BtnHistory_OnClicked"></Button> 

      <Button Text="Logout" Command="{Binding LogoutCommand}" Clicked="Logout_OnClicked"/> 

     </StackLayout> 
     </ContentPage.Content> 

    </ContentPage> 

</MasterDetailPage.Master> 


</MasterDetailPage> 

這裏是我的社區頁面,在這裏我使用使用GetDashboard命令額外的按鈕

<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> 

<ContentPage.ToolbarItems> 
    <ToolbarItem Text="Add New" 
       Icon="add.png" 
       Priority="0" 
       Clicked="MenuItem_OnClicked"/> 
</ContentPage.ToolbarItems> 


<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> 

下面是GetDashboard命令在我的ViewModel

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

使用Page的OnAppearing方法來觸發數據請求 – Jason

+0

我對此感到困惑。你可以指導我嗎?我必須在一個小時後展示我的最後一年項目。 –

+0

@UzairNadeem你至少可以接受Jason的回答或回覆爲什麼它不適合你。 –

回答

0

每頁都有一個OnAppearing方法,當頁面顯示時觸發。你可以使用它來加載你的數據,而不是讓用戶點擊一個按鈕。

public override async void OnAppearing() { 

    base.OnAppearing(); 

    var accessToken = Settings.AccessToken; 
    UserDashboard = await _apiServices.GetDashboard(accessToken); 
} 
相關問題