Reputation: 115
I am trying to learn Caliburn micro to use in Windows Phone 8 app development. But I am facing problem as it only works for main view model and is not able to connect any other view model to its view. Here is the code for other page than main page. Please suggest a solution to this problem. Thanks in advance
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;
};
}
}
}
Upvotes: 0
Views: 151
Reputation: 3914
CalibMicro.Page1 should be CalibMicro.Page1View since your viewmodel is named Page1ViewModel
Upvotes: 1
Reputation: 7669
Try to inherit Screen instead of PropertyChangedBase
Page1ViewModel:Screen
Upvotes: 0