2014-06-30 137 views
0

我想學習Caliburn micro在Windows Phone 8應用程序開發中使用。但是我面臨的問題是它僅適用於主視圖模型,並且無法將任何其他視圖模型連接到其視圖。這是除主頁以外的其他頁面的代碼。請建議解決這個問題。在此先感謝Caliburn Micro for Windows Phone 8不能正常工作

的Page1.xaml

<phone:PhoneApplicationPage 
    x:Class="CalibMicro.Page1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="Portrait" Orientation="Portrait" 
    mc:Ignorable="d" 
    shell:SystemTray.IsVisible="True"> 

    <!--LayoutRoot is the root grid where all page content is placed--> 
    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <!--TitlePanel contains the name of the application and page title--> 
     <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
      <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> 
      <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
     </StackPanel> 

     <!--ContentPanel - place additional content here--> 
     <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
      <TextBlock x:Name="TextBox2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50" /> 
     </Grid> 
    </Grid> 

</phone:PhoneApplicationPage> 

Page1ViewModel

using System.Windows; 
namespace CalibMicro { 
    public class Page1ViewModel : Caliburn.Micro.PropertyChangedBase 
    { 
     public Page1ViewModel() 
     { 
      MessageBox.Show("Hello World !"); 
      TextBox2 = "Hello World"; 
     } 

     private string _textBox2; 
     public string TextBox2 
     { 
      get { return _textBox2; } 
      set 
      { 
       _textBox2 = value; 
       NotifyOfPropertyChange(() => TextBox2); 
      } 
     } 
    } 
} 

AppBootStrapper

namespace CalibMicro { 
    using System; 
    using System.Collections.Generic; 
    using System.Windows.Controls; 
    using Microsoft.Phone.Controls; 
    using Caliburn.Micro; 

    public class AppBootstrapper : PhoneBootstrapperBase { 
     PhoneContainer container; 

     public AppBootstrapper() { 
      Initialize(); 
     } 

     protected override void Configure() { 
      container = new PhoneContainer(); 
      if (!Execute.InDesignMode) 
       container.RegisterPhoneServices(RootFrame); 

      container.PerRequest<MainPageViewModel>(); 
      container.PerRequest<Page1ViewModel>(); 

      AddCustomConventions(); 
     } 

     protected override object GetInstance(Type service, string key) { 
      var instance = container.GetInstance(service, key); 
      if (instance != null) 
       return instance; 

      throw new InvalidOperationException("Could not locate any instances."); 
     } 

     protected override IEnumerable<object> GetAllInstances(Type service) { 
      return container.GetAllInstances(service); 
     } 

     protected override void BuildUp(object instance) { 
      container.BuildUp(instance); 
     } 

     static void AddCustomConventions() { 
      ConventionManager.AddElementConvention<Pivot>(Pivot.ItemsSourceProperty, "SelectedItem", "SelectionChanged").ApplyBinding = 
       (viewModelType, path, property, element, convention) => { 
        if (ConventionManager 
         .GetElementConvention(typeof(ItemsControl)) 
         .ApplyBinding(viewModelType, path, property, element, convention)) { 
         ConventionManager 
          .ConfigureSelectedItem(element, Pivot.SelectedItemProperty, viewModelType, path); 
         ConventionManager 
          .ApplyHeaderTemplate(element, Pivot.HeaderTemplateProperty, null, viewModelType); 
         return true; 
        } 

        return false; 
       }; 

      ConventionManager.AddElementConvention<Panorama>(Panorama.ItemsSourceProperty, "SelectedItem", "SelectionChanged").ApplyBinding = 
       (viewModelType, path, property, element, convention) => { 
        if (ConventionManager 
         .GetElementConvention(typeof(ItemsControl)) 
         .ApplyBinding(viewModelType, path, property, element, convention)) { 
         ConventionManager 
          .ConfigureSelectedItem(element, Panorama.SelectedItemProperty, viewModelType, path); 
         ConventionManager 
          .ApplyHeaderTemplate(element, Panorama.HeaderTemplateProperty, null, viewModelType); 
         return true; 
        } 

        return false; 
       }; 
     } 
    } 
} 

回答

1

CalibMicro.Page1應該是CalibMicro.Page1View因爲您的視圖模型被命名爲Page1ViewModel

+0

中對Page1做了初始導航頁面它的工作..謝謝 –

0

嘗試繼承,而不是PropertyChangedBase

屏幕
Page1ViewModel:Screen 
+0

嘗試,也但還是它不工作 –

+0

什麼您的意思是「不能夠將任何其他視圖模型連接到其視圖「? –

+0

@Radenko ..當我運行應用程序page1.xaml正在加載,但page1viewmodel中的消息框和文本框不是,即視圖正在工作,但viewmodel不是。 –