2016-12-01 4 views
0

Ich habe eine Xamarin Forms-Anwendung mit MVVMCross. Dort habe ich die Navigation über TabbedPages. Jede Seite hat einen XAML + Code hinter und Viewmodel.mvvmcross Navigieren zu Viewmodel von Registerkarten

Relevante Code für die erste Seite:

<?xml version="1.0" encoding="utf-8" ?> 
<pages:BaseTabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:pages="clr-namespace:ABBI_XPlat_3.Pages;assembly=ABBI_XPlat_3" 
     x:Class="ABBI_XPlat_3.Pages.DeviceListPage" 
     Title="Discover devices" 
     x:Name="DevicePage"> 
<pages:BaseTabbedPage.Resources> 
    <ResourceDictionary> 
    <DataTemplate x:Key="DeviceItemTemplate"> ... </DataTemplate> 
    </ResourceDictionary> 
</pages:BaseTabbedPage.Resources> 
<pages:BaseTabbedPage.Children> 
    <pages:BasePage Title="Scan for devices"> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     </Grid.RowDefinitions> 
     <StackLayout BackgroundColor="#FF6969" Padding="10" IsVisible="{Binding IsStateOn, Converter={StaticResource InverseBoolean}}"> 
     <Label Text="{Binding StateText}" FontSize="18" HorizontalTextAlignment="Center"></Label> 
     </StackLayout> 

     <ListView Grid.Row="1" ItemsSource="{Binding Devices}" SelectedItem="{Binding SelectedDevice, Mode=TwoWay}" 
      IsPullToRefreshEnabled="True" 
      RefreshCommand="{Binding RefreshCommand}" 
      IsRefreshing="{Binding IsRefreshing, Mode=OneWay}" 
      RowHeight="80" 
      ItemTemplate="{StaticResource DeviceItemTemplate}"> 
     </ListView> 

     <StackLayout Grid.Row="2" Orientation="Horizontal"> 
     <Button Text="Connect" Command="{Binding ConnectToSelectedCommand}" HorizontalOptions="FillAndExpand"/> 
     <Button Text="Stop Scan" Command="{Binding StopScanCommand}" HorizontalOptions="End"/> 
     <ActivityIndicator IsRunning="{Binding IsRefreshing}" 
         HeightRequest="24" 
         WidthRequest="24" 
         VerticalOptions="Center" 
         HorizontalOptions="End"/> 
     </StackLayout> 

    </Grid> 
    </pages:BasePage> 
    <pages:ServiceListPage Title="Services"/> 
    <pages:OtherTabbedPage Title="Services"/> 
</pages:BaseTabbedPage.Children> 
</pages:BaseTabbedPage> 

Ich bin in der Lage verschiedene Viewmodel von Schaltflächen in meiner Hauptansicht Modell nennen mit:

public MvxCommand ConnectToSelectedCommand => new MvxCommand(ConnectToSelectedDeviceAsync, CanDisplayServices); 

    private async void ConnectToSelectedDeviceAsync() 
    { 
     ShowViewModel<ServiceListViewModel>(new MvxBundle(new Dictionary<string, string> { { DeviceIdKey, SystemDevices.FirstOrDefault().Id.ToString() } })); 
    } 

In meinem Hauptansichtsmodell. Aber ich möchte mit den Tabs zwischen ViewModels navigieren können. Im Moment, wenn ich auf einen Tab klicke, erscheint die Seite, aber ohne das zugehörige ViewModel.

Hilfe bitte!

Antwort

0

Endlich geschafft, das Problem zu lösen. Es war so einfach, dass ich nirgends eine Antwort finden konnte. Ich musste dem Codebehind der Seite nur einen Bindungskontext hinzufügen.

public ServiceListPage() 
    { 
     InitializeComponent(); 
     this.BindingContext = new ViewModels.ServiceListViewModel(Plugin.BLE.CrossBluetoothLE.Current.Adapter, UserDialogs.Instance); 
    } 
Verwandte Themen