2015-11-10 3 views
0

У меня возникает проблема, когда я пытаюсь использовать команду для открытия второй модели просмотра. V4.0.Beta5. я следовал Exemple описано в N + 1 видео серии https://www.youtube.com/playlist?list=PLR6WI6W1JdeYSXLbm58jwAKYT7RQR31-WMVVMcross Command Binding fire Exception

Первый ViewModel

public class FirstViewModel 
    : MvxViewModel 
{ 
    private string _hello = "Hello MvvmCross"; 

    public string Hello 
    { 
     get { return _hello; } 
     set 
     { 
      _hello = value; 
      RaisePropertyChanged(() => Hello); 
     } 
    } 

    private Cirrious.MvvmCross.ViewModels.MvxCommand _goSecondViewCommand; 

    public System.Windows.Input.ICommand GoSecondViewCommand 
    { 
     get 
     { 
      _goSecondViewCommand = _goSecondViewCommand ?? 
            new Cirrious.MvvmCross.ViewModels.MvxCommand(DoGoSecondView); 
      return _goSecondViewCommand; 
     } 
    } 

    private void DoGoSecondView() 
    { 
     base.ShowViewModel<SecondViewModel>(); 
    } 
} 

Second View модель

public class SecondViewModel :MvxViewModel 
{ 
    private string _hello2 = "Hello2 MvvmCross"; 

    public string Hello2 
    { 
     get { return _hello2; } 
     set 
     { 
      _hello2 = value; 
      RaisePropertyChanged(() => Hello2); 
     } 
    } 
} 

Первый взгляд

<views:MvxWindowsPage 
x:Class="TestCommand.UWP.Views.FirstView" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:TestCommand.UWP" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:views="using:Cirrious.MvvmCross.WindowsUWP.Views" 
mc:Ignorable="d"> 

<Grid> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="70,92,0,0" TextWrapping="Wrap" Text="FirstView" VerticalAlignment="Top" Width="223"/> 
    <Button x:Name="button" Command="{Binding GoSecondViewCommand}" Content="Button" HorizontalAlignment="Left" Height="108" Margin="70,346,0,0" VerticalAlignment="Top" Width="223"/> 
</Grid> 

Второй вид

<views:MvxWindowsPage 
x:Class="TestCommand.UWP.Views.SecondView" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:TestCommand.UWP.Views" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:views="using:Cirrious.MvvmCross.WindowsUWP.Views" 
mc:Ignorable="d" 
d:DesignHeight="300" 
d:DesignWidth="400"> 

<Grid /> 

установки Класс:

public class Setup : MvxWindowsSetup 
{ 
    public Setup(Frame rootFrame) : base(rootFrame) 
    { 
    } 

    protected override IMvxApplication CreateApp() 
    { 
     return new TestCommand.Core.App(); 
    } 
} 

Если вы хотите, вы можете загрузить решение здесь: https://onedrive.live.com/redir?resid=A5D9789788DE33CB!36079&authkey=!AKs9nsG28iI6nQQ&ithint=file%2czip.

+0

В чем исключение? –

+0

e = {Windows.UI.Xaml.Navigation.NavigationFailedEventArgs} -> Exception = {"Ссылка на объект не установлена ​​в экземпляр объекта."} – Exatex

+0

У вас есть SecondView? (вы показываете только первый вид) –

ответ

1

Возможная причина заключается не использовать настройки правильно в вашем UWP приложения, вот что я делаю, чтобы сделать эту работу:

1) Создать два ViewModels в UWP приложения: FirstViewModel и SecondViewModel

2) Создать класс настройки в файле Setup.cs:

public class Setup : MvxWindowsSetup 
{ 
     public Setup(Frame rootFrame) : base(rootFrame) 
     { 
     } 

     protected override IMvxApplication CreateApp() 
     { 
      return new AppSetup(); 
     } 
} 

public class AppSetup : MvxApplication 
{ 
     public override void Initialize() 
     { 
      RegisterAppStart<FirstViewModel>(); 
     } 
} 

3) FirstView.xaml:

<StackPanel> 
     <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="70,92,0,0" TextWrapping="Wrap" Text="FirstView" VerticalAlignment="Top" Width="223"/> 
     <TextBlock Height="50" Text="{Binding Hello}" /> 
     <Button x:Name="button" Command="{Binding GoSecondViewCommand}" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="223" Height="50" /> 
    </StackPanel> 

4) SecondView.xaml:

<StackPanel> 
     <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="70,92,0,0" TextWrapping="Wrap" Text="SecondView" VerticalAlignment="Top" Width="223"/> 
     <TextBlock Height="50" Text="{Binding Hello2}" /> 
    </StackPanel> 

5) В App.xaml.cs файле, внести следующие изменения в OnLaunched метода:

protected override void OnLaunched(LaunchActivatedEventArgs e) 
{ 

...... 

      if (rootFrame.Content == null) 
      { 
       var setup = new Setup(rootFrame); 
       setup.Initialize(); 

       var start = Mvx.Resolve<IMvxAppStart>(); 
       start.Start(); 
      } 
      // Ensure the current window is active 
      Window.Current.Activate(); 
} 

Кстати, версия MvvmCross 3.5.1

Проверить Завершенный образец на Github


Обновление для исключения в OnNavigationFailed метода:

Прокомментируйте эту строку в FirstView и SecondView в коде позади:

ViewModel = new FirstViewModel(); 

ViewModel = new SecondViewModel(); 

MvvmCross автоматически установил ViewModel.

+0

Я обновил свой код (только настройка была другой). я получаю сообщение об ошибке, когда в начале приложения: System.Exception было необработанное пользователем кода HResult = -2146233088 сообщение = Не удалось загрузить страницу TestCommand.UWP.Views.FirstView Source = TestCommand.UWP StackTrace: в TestCommand .UWP.App.OnNavigationFailed (Object sender, NavigationFailedEventArgs e) InnerException: – Exatex

+0

Где вы инициализировали программу установки? Не могли бы вы поделиться своей демонстрацией с помощью OneDrive? –

+0

Добавлено в конце моего оригинального сообщения. – Exatex