2016-09-30 18 views
0

xamlページのレイアウトをabsolutからstacklayoutに変更することにしました。その後、アプリが起動するとnullre ..例外が発生しました。私は、ページ内のすべての要素、たとえstacklayoutであっても、コメントしていましたが、まだエラーがあります。私は初めてCall Stackを使用しようとしましたが、私はそれを何と役に立つのか分かりません。 私のページを変更する前に、すべてうまくいっていました。 さらに、MasterDetailPageのマスターページです。 Xaml.csファイルが空です。ここ は今XAMLです:奇妙なNullReferenceExceptionと無駄な呼び出しスタック

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

**これはそれが前に見えた方法です:** ここで `

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

は今私のViewModelです:

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; 
    //} 
} 
} 

そして前:

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

私はすべてのものをコメントし、私は、なぜそれがoccuers見当がつかない。

画像は私のコールスタックです。しかし、私はそれが何を意味するのか分からず、私はそれで何もできません。 enter image description here

答えて

0

プリズムでは、現在のビューモデルからパラメータを送信して、ナビゲートするページのモデルを表示できます。だから、私はパラメータを送信していました。別の側では、それらを取っていました。しかし、私はそれらを呼び出す前に、彼らの存在を確認していませんでした。だからNullReferenceExceptionがあった。

関連する問題