2012-05-29 2 views
0

Я создал Библиотека WP класса BusinessLogic проект, который состоит из этих трех классовПочему мой WP эмулятор останавливается на SplashScreen

1) бутылки класса

namespace BusinessLogic 
{ 
    public class Bottle : INotifyPropertyChanged 
    { 
     // Due to INotifyPropertyChanged interface 
     public event PropertyChangedEventHandler PropertyChanged; 

     // Proprietà Title 
     private string title; 
     public string Title 
     { 
      set 
      { 
       if (title != value) 
       { 
        title = value; 
        OnPropertyChanged("Title"); 
       } 
      } 
      get 
      { 
       return title; 
      } 
     } 
     // Proprietà PhotoFileName 
     private string photoFileName; 
     public string PhotoFileName 
     { 
      set 
      { 
       if (photoFileName != value) 
       { 
        photoFileName = value; 
        OnPropertyChanged("PhotoFileName"); 
       } 
      } 
      get 
      { 
       return photoFileName; 
      } 
     } 
    protected virtual void OnPropertyChanged(string propChanged) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propChanged)); 
    } 
    } 
} 

2) Бутылки класса

namespace BusinessLogic 
{ 
    public class Bottles : INotifyPropertyChanged 
    { 
     // Due to INotifyPropertyChanged interface 
     public event PropertyChangedEventHandler PropertyChanged; 

     // Proprietà MainTitle 
     private string mainTitle; 
    public string MainTitle 
    { 
     set 
     { 
      if (mainTitle != value) 
      { 
       mainTitle = value; 
       OnPropertyChanged("MainTitle"); 
      } 
     } 
     get 
     { 
      return mainTitle; 
     } 
    } 

    // Proprietà bottles 
    private ObservableCollection<Bottle> bottleSet = new ObservableCollection<Bottle>(); 
    public ObservableCollection<Bottle> BottleSet 
    { 
     set 
     { 
      if (bottleSet != value) 
      { 
       bottleSet = value; 
       OnPropertyChanged("BottleSet"); 
      } 
     } 
     get { return bottleSet; } 
    } 

    protected virtual void OnPropertyChanged(string propChanged) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propChanged)); 
    } 

} 
} 

3) BottlesPresenter Класс

namespace BusinessLogic 
{ 
    public class BottlesPresenter : INotifyPropertyChanged 
    { 
    // Due to INotifyPropertyChanged interface 
    public event PropertyChangedEventHandler PropertyChanged; 


    // Proprietà BottleMatrix 
    private Bottles bottlesMatrix; 
    public Bottles BottlesMatrix 
    { 
     protected set 
     { 
      if (bottlesMatrix != value) 
      { 
       bottlesMatrix = value; 
       OnPropertyChanged("BottlesMatrix"); 
      } 
     } 
     get { return bottlesMatrix; } 
    } 

    public BottlesPresenter() 
    { 
     XmlSerializer xml = new XmlSerializer(typeof(Bottles)); 

     using (StreamReader fileReader = new   StreamReader(@"C:\Stuff\WindowsPhone\AppLearningHowTo2\AppLearningHowTo2\DAL\DB.xml")) 
     { 
      BottlesMatrix = (Bottles)xml.Deserialize(fileReader); 
     } 
    } 

     protected virtual void OnPropertyChanged(string propChanged) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propChanged)); 
     } 
    } 
} 

BottlePresenter конструктор должен десериализации из файла XML, расположенного в файловой системе. Он содержит следующие теги

<?xml version="1.0"?> 
<Bottles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <MainTitle>MainTitle</MainTitle> 
    <Bottleset> 
    <Bottle> 
     <Title>Title1</Title> 
     <PhotoFileName>PhotoFileName1</PhotoFileName> 
    </Bottle> 
    <Bottle> 
     <Title>Title2</Title> 
     <PhotoFileName>PhotoFileName2</PhotoFileName> 
    </Bottle> 
    </Bottleset> 
</Bottles> 

Затем я создал WP приложения, и я сделал ссылку на библиотеку проекта BusinessLogic.dll.

В файле MainPage.xaml я помещал декларации XML пространства имен

xmlns:businesslogic="clr-namespace:BusinessLogic;assembly=BusinessLogic" 

Я тогда инстанцированный в BottlesPresenter класс в коллекции MainPage.xaml ресурсов

<phone:PhoneApplicationPage.Resources> 
    <businesslogic:BottlesPresenter x:Key="bottlesPresenter" />   
</phone:PhoneApplicationPage.Resources> 

И, наконец, положить TextBlock в области контента со связыванием с этим ресурсом:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <TextBlock HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Text="{Binding Source={StaticResource bottlesPresenter}, 
            Path=Bottles.MainTitle}" /> 

К сожалению, я запускаю отладчик, включающий эмулятор, доходит до заставки и не идет дальше.

В двух словах: я не могу связаться, чтобы создать экземпляр класса BottlesPresenter.

Я несколько недель стучал головой о стену, не найдя решения.

Пожалуйста, может кто-нибудь дать мне руку?

Большое спасибо

Антонио

+0

Любой выход отладки? Вы достигаете контрольных точек? Если вы удалите ссылки на бутылки, то Presenter по крайней мере загрузит первую страницу? Можете ли вы опубликовать полный текст? –

+0

Привет, Мэтт. Нет отладочного выхода и не достигнуты точки останова. Удаляя ссылки, первая страница загружается без каких-либо проблем. Что вы имеете в виду с «post full repro»? Я не нашел способ загрузить все решение на StackOverFlow. В любом случае, если вы дадите мне свой адрес электронной почты, я могу отправить вам решение. Многое много Спасибо. Антонио – LarAnto

ответ

0

Emulator ведет себя, как, что, когда WP7 не может построить объект Application. Из вопроса я вижу только 1 ссылку из приложения в ваш код. Это BottlePresenter в ресурсах. XamlLoader пытается создать экземпляр этого типа.

Посмотрите, что находится внутри вашего BottlePresenter constructur:

public BottlesPresenter() 
{ 
    XmlSerializer xml = new XmlSerializer(typeof(Bottles)); 

    using (StreamReader fileReader = new StreamReader(
    @"C:\Stuff\WindowsPhone\AppLearningHowTo2\AppLearningHowTo2\DAL\DB.xml")) 
    { 
     BottlesMatrix = (Bottles)xml.Deserialize(fileReader); 
    } 
} 

Первая линия в порядке. Вторая строка в порядке. Третья строка вызывает исключение, потому что путь «C: \ Stuff \ WindowsPhone \ AppLearningHowTo2 \ AppLearningHowTo2 \ DAL \ DB.xml" неприемлем для Windows Phone. Все файлы, к которым вы можете получить доступ, - это содержимое вашего XAP, ресурсы в вашей сборке и файлы в изолированном хранилище.

Эти статьи могут помочь вам All about WP7 Isolated Storage - Read and Save Text files