我正在尝试学习Caliburn micro用于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;
};
}
}
}
答案 0 :(得分:1)
CalibMicro.Page1应为CalibMicro.Page1View,因为您的viewmodel名为Page1ViewModel
答案 1 :(得分:0)
尝试继承Screen而不是PropertyChangedBase
Page1ViewModel:Screen