为什么我的WP模拟器在启动画面停止

时间:2012-05-29 21:53:43

标签: silverlight-4.0 windows-phone-7.1

我创建了一个由这三个类组成的WP类库 BusinessLogic 项目

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"

然后我在MainPage.xaml Resources集合中实例化 BottlesPresenter

<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 类的实例。

在没有找到解决方案的情况下,我将头撞在墙上数周。

请有人帮我一把吗?

非常感谢

安东尼奥

1 个答案:

答案 0 :(得分:0)

当WP7无法构造Application对象时,Emulator的行为与此类似。从问题来看,我只看到应用程序中的1个引用到您的代码。它是参考资料中的BottlePresenter。 XamlLoader尝试创建此类型的实例。

查看BottlePresenter构建器中的内容:

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);
    }
}

第一行是好的。 第二行还可以。 第三行导致异常,因为Windows Phone上不接受路径“C:\ Stuff \ WindowsPhone \ AppLearningHowTo2 \ AppLearningHowTo2 \ DAL \ DB.xml”。 您可以访问的所有文件都是XAP的内容,程序集中的资源以及隔离存储中的文件。

以下文章可能对您有所帮助All about WP7 Isolated Storage - Read and Save Text files