2016-09-30 2 views
0

Ich entschied mich, das Layout in meiner XAML-Seite von absolut zu Stacklayout zu ändern und danach hatte ich nullre .. Ausnahme, wenn meine App zu laufen beginnt. Ich habe alle Elemente in der Seite von einem zum anderen kommentiert, sogar Stacklayout, aber ich habe immer noch Fehler. Ich habe versucht, Call Stack beim ersten Mal zu benutzen, aber ich sehe nicht, was ich damit anfangen kann. Bevor ich anfing, meine Seite zu ändern, funktionierte alles gut. Außerdem ist Master-Seite für MasterDetailPage. Xaml.cs-Datei ist leer. Hier ist XAML jetzt:Strange NullReferenceException und nutzlos Call Stack

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
       xmlns:b="clr-namespace:Xamarin.Behaviors;assembly=Xamarin.Behaviors" 
       prism:ViewModelLocator.AutowireViewModel="True" 
       x:Class="GitRemote.Views.MasterPage" 
       Title="Necessary"> 

     <!--<StackLayout x:Name="MasterMenu" 
        HorizontalOptions="StartAndExpand" 
        VerticalOptions="StartAndExpand"> 

     --><!--<BoxView x:Name="GrayHeader" 
       Color="#CACED2" 
       HorizontalOptions="StartAndExpand" 
       VerticalOptions="Start" 
       HeightRequest="100"/>--><!-- 


     --><!--<Image x:Name="MasterProfileImage" 
       WidthRequest="50" 
       HeightRequest="50" 
       Source="ic_account_circle_white_24dp.png" 
       HorizontalOptions="Start" 
       VerticalOptions="Start" 
       Margin="15, 15, 0, 0"/>--><!-- 

     --><!--<Image x:Name="LogOutImage" 
       WidthRequest="45" 
       HeightRequest="45" 
       Source="ic_menu_logout.png" 
       HorizontalOptions="End" 
       VerticalOptions="Start" 
       Margin="0, 15, 15, 0"/>--><!-- 

     --><!--<Label x:Name="MasterProfileName" 
       Text="GitRemote" 
       FontAttributes="Bold" 
       FontSize="18" 
       HorizontalOptions="Start" 
       VerticalOptions="Start" 
       TextColor="Black" 
       Margin="15, 80, 0, 0"/>--><!-- 


     --><!--<ListView x:Name="MasterPageMenu" 
        SeparatorColor="Transparent" 
        HorizontalOptions="Start" 
        VerticalOptions="Start" 
        Margin="15, 120, 0, 0" 
        ItemsSource="{Binding MenuItems}" 
        SelectedItem="{Binding MenuItemSelectedProperty, Mode=TwoWay}"> 
      <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
       <StackLayout Orientation="Horizontal" 
          Spacing="15" 
          Padding="10" > 
        <Label Text="{Binding Name}" 
         FontSize="16" 
         VerticalOptions="Center" 
         FontAttributes="Bold"/> 
        <Image Source="{Binding ImageSource}" 
         WidthRequest="25" 
         HeightRequest="25" /> 
       </StackLayout> 
       </ViewCell> 
      </DataTemplate> 
      </ListView.ItemTemplate> 
      <b:Interaction.Behaviors> 
      <b:BehaviorCollection> 
       <b:EventToCommand EventName="ItemSelected" 
           Command="{Binding MenuItemSelected}"></b:EventToCommand> 
      </b:BehaviorCollection> 
      </b:Interaction.Behaviors> 
     </ListView>--><!-- 

     </StackLayout>--> 

    </ContentPage>` 

** Dies ist, wie es aussah, bevor: ** `

<!--Header--> 
<BoxView x:Name="GrayHeader" 
     Style="{StaticResource GrayBoxView}" 
     AbsoluteLayout.LayoutBounds="{Binding MasterProfileGrayHeaderBounds}" 
     AbsoluteLayout.LayoutFlags="All"> 
</BoxView> 

<Image x:Name="MasterProfileImage" 
     WidthRequest="50" 
     HeightRequest="50" 
     Source="ic_account_circle_white_24dp.png" 
     AbsoluteLayout.LayoutBounds="{Binding MasterProfileImageBounds}" 
     AbsoluteLayout.LayoutFlags="None"> 
</Image> 

<Label x:Name="MasterProfileName" 
     Text="GitRemote" 
     FontAttributes="Bold" 
     FontSize="18" 
     AbsoluteLayout.LayoutBounds="{Binding MasterProfileNameBounds}" 
     AbsoluteLayout.LayoutFlags="None"> 
</Label> 

<!--Body--> 

<ListView x:Name="MasterPageMenu" 
      SeparatorColor="Transparent" 
      AbsoluteLayout.LayoutBounds="{Binding MasterMenuBounds}" 
      AbsoluteLayout.LayoutFlags="None" 
      ItemsSource="{Binding MenuItems}" 
      SelectedItem="{Binding MenuItemSelectedProperty, Mode=TwoWay}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <StackLayout Orientation="Horizontal" Spacing="15" Padding="10" > 
        <Label Text="{Binding Name}" FontSize="16" VerticalOptions="Center" FontAttributes="Bold"/> 
        <Image Source="{Binding ImageSource}" WidthRequest="25" HeightRequest="25" /> 
       </StackLayout> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <b:Interaction.Behaviors> 
     <b:BehaviorCollection> 
     <b:EventToCommand EventName="ItemSelected" Command="{Binding MenuItemSelected}"></b:EventToCommand> 
     </b:BehaviorCollection> 
    </b:Interaction.Behaviors> 
</ListView> 

Hier meine Viewmodel ist jetzt:

using GitRemote.Models; 
using Prism.Commands; 
using Prism.Mvvm; 
using Prism.Navigation; 
using System.Collections.ObjectModel; 

namespace GitRemote.ViewModels 
{ 
public class MasterPageViewModel : BindableBase 
{ 

    #region Constants 
    private const string GistsPageImagePath = "ic_code_black_24dp.png"; 
    private const string IssueDashboardPageImagePath = "ic_slow_motion_video_black_24dp.png"; 
    private const string BookmarksPageImagePath = "ic_bookmark_black_24dp.png"; 
    private const string ReportAnIssuePageImagePath = "ic_error_outline_black_24dp.png"; 
    #endregion 

    //#region Bindable properties 
    //private Rectangle _masterProfileGrayHeaderBounds; 

    //public Rectangle MasterProfileGrayHeaderBounds 
    //{ 
    // get { return _masterProfileGrayHeaderBounds; } 
    // set { SetProperty(ref _masterProfileGrayHeaderBounds, value); } 
    //} 

    //private Rectangle _masterProfileImageBounds; 

    //public Rectangle MasterProfileImageBounds 
    //{ 
    // get { return _masterProfileImageBounds; } 
    // set { SetProperty(ref _masterProfileImageBounds, value); } 
    //} 

    //private Rectangle _masterProfileNameBounds; 

    //public Rectangle MasterProfileNameBounds 
    //{ 
    // get { return _masterProfileNameBounds; } 
    // set { SetProperty(ref _masterProfileNameBounds, value); } 
    //} 

    //private Rectangle _masterMenuBounds; 

    //public Rectangle MasterMenuBounds 
    //{ 
    // get { return _masterMenuBounds; } 
    // set { SetProperty(ref _masterMenuBounds, value); } 
    //} 

    //private MasterPageMenuItemModel _menuItemSelectedProperty; 

    //public MasterPageMenuItemModel MenuItemSelectedProperty 
    //{ 
    // get { return _menuItemSelectedProperty; } 
    // set { SetProperty(ref _menuItemSelectedProperty, value); } 
    //} 
    ////#endregion 

    //private readonly INavigationService _navigationService; 

    //public ObservableCollection<MasterPageMenuItemModel> MenuItems; 

    //public DelegateCommand MenuItemSelected; 

    public MasterPageViewModel() 
    { 
     //_navigationService = navigationService; 
     //MenuItemSelected = new DelegateCommand(OnMenuItemSelected); 

     //MasterProfileGrayHeaderBounds = new Rectangle(0, 0, 1, 0.175); 
     //MasterProfileImageBounds = new Rectangle(16, 16, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 
     //MasterProfileNameBounds = new Rectangle(16, 70, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 
     //MasterMenuBounds = new Rectangle(16, 100 + 10, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 

     //MenuItems = new ObservableCollection<MasterPageMenuItemModel> 
     //{ 
     // new MasterPageMenuItemModel {Name = "GistsPage", ImageSource = GistsPageImagePath}, 
     // new MasterPageMenuItemModel {Name = "IssueDashboardPage", ImageSource = IssueDashboardPageImagePath}, 
     // new MasterPageMenuItemModel {Name = "BookmarksPage", ImageSource = BookmarksPageImagePath}, 
     // new MasterPageMenuItemModel {Name = "ReportAnIssuePage", ImageSource = ReportAnIssuePageImagePath} 
     //}; 
    } 

    //private void OnMenuItemSelected() 
    //{ 
    // if (MenuItemSelectedProperty == null) return; 
    // _navigationService.NavigateAsync(MenuItemSelectedProperty.Name, animated: false); 
    // MenuItemSelectedProperty = null; 
    //} 
} 
} 

Und vor:

using GitRemote.Models; 
using Prism.Commands; 
using Prism.Mvvm; 
using Prism.Navigation; 
using System.Collections.ObjectModel; 
using Xamarin.Forms; 

namespace GitRemote.ViewModels 
{ 
public class MasterPageViewModel : BindableBase 
{ 

    #region Constants 
    private const string GistsPageImagePath = "ic_code_black_24dp.png"; 
    private const string IssueDashboardPageImagePath = "ic_slow_motion_video_black_24dp.png"; 
    private const string BookmarksPageImagePath = "ic_bookmark_black_24dp.png"; 
    private const string ReportAnIssuePageImagePath = "ic_error_outline_black_24dp.png"; 
    #endregion 

    #region Bindable properties 
    private Rectangle _masterProfileGrayHeaderBounds; 

    public Rectangle MasterProfileGrayHeaderBounds 
    { 
     get { return _masterProfileGrayHeaderBounds; } 
     set { SetProperty(ref _masterProfileGrayHeaderBounds, value); } 
    } 

    private Rectangle _masterProfileImageBounds; 

    public Rectangle MasterProfileImageBounds 
    { 
     get { return _masterProfileImageBounds; } 
     set { SetProperty(ref _masterProfileImageBounds, value); } 
    } 

    private Rectangle _masterProfileNameBounds; 

    public Rectangle MasterProfileNameBounds 
    { 
     get { return _masterProfileNameBounds; } 
     set { SetProperty(ref _masterProfileNameBounds, value); } 
    } 

    private Rectangle _masterMenuBounds; 

    public Rectangle MasterMenuBounds 
    { 
     get { return _masterMenuBounds; } 
     set { SetProperty(ref _masterMenuBounds, value); } 
    } 

    private MasterPageMenuItemModel _menuItemSelectedProperty; 

    public MasterPageMenuItemModel MenuItemSelectedProperty 
    { 
     get { return _menuItemSelectedProperty; } 
     set { SetProperty(ref _menuItemSelectedProperty, value); } 
    } 
    #endregion 

    private readonly INavigationService _navigationService; 

    public ObservableCollection<MasterPageMenuItemModel> MenuItems; 

    public DelegateCommand MenuItemSelected; 

    public MasterPageViewModel(INavigationService navigationService) 
    { 
     _navigationService = navigationService; 
     MenuItemSelected = new DelegateCommand(OnMenuItemSelected); 

     MasterProfileGrayHeaderBounds = new Rectangle(0, 0, 1, 0.175); 
     MasterProfileImageBounds = new Rectangle(16, 16, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 
     MasterProfileNameBounds = new Rectangle(16, 70, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 
     MasterMenuBounds = new Rectangle(16, 100 + 10, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize); 

     MenuItems = new ObservableCollection<MasterPageMenuItemModel> 
     { 
      new MasterPageMenuItemModel {Name = "GistsPage", ImageSource = GistsPageImagePath}, 
      new MasterPageMenuItemModel {Name = "IssueDashboardPage", ImageSource = IssueDashboardPageImagePath}, 
      new MasterPageMenuItemModel {Name = "BookmarksPage", ImageSource = BookmarksPageImagePath}, 
      new MasterPageMenuItemModel {Name = "ReportAnIssuePage", ImageSource = ReportAnIssuePageImagePath} 
     }; 
    } 

    private void OnMenuItemSelected() 
    { 
     if (MenuItemSelectedProperty == null) return; 
     _navigationService.NavigateAsync(MenuItemSelectedProperty.Name, animated: false); 
     MenuItemSelectedProperty = null; 
    } 
} 
} 

bemerkte ich alle Sachen, und ich habe keine Ahnung, wo und warum es occuers.

Auf Bild ist meine Anrufliste. Aber ich weiß nicht was es bedeutet und ich kann nichts damit anfangen. enter image description here

Antwort

0

In Prism können Sie Parameter vom aktuellen Ansichtsmodell senden, um das Modell der Seite anzuzeigen, die Sie navigieren. Also schickte ich Parameter und auf einer anderen Seite nahm ich sie. ABER, ich habe nicht nach ihrer Existenz gesucht, bevor ich sie anrufe. Also gab es NullReferenceException.

Verwandte Themen