私は現在、Microsoft virtual academy の Windows Phone チュートリアルに従っています。課題の 1 つは、プロジェクトで作成され、実行時に読み込まれるデザイン xaml ビューモデルを使用することでした。
これを何時間も調査した後、どこにも行けないので、スタックオーバーフローに頼る時が来たと思いました。私は数多くの記事を読みましたが、どれも正しい答えをくれていないので、いくつか質問があります。
- エラーを修正するにはどうすればよいですか?
 - プログラムで実行時にxamlモデルビューをロードする方法は?
 - xamlを使用して実行時にxamlモデルビューをロードする方法は?
 - 実行時に xaml の読み込みを呼び出す場所
 
サンプル データ ファイル、つまり SoundViewModelSampleData.xaml は次のようになります。
<vm:SoundViewModel
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vm="clr-namespace:Soundboard.ViewModels"
    xmlns:mo="clr-namespace:Soundboard.Models">
    <vm:SoundViewModel.Animals>
        <vm:SoundGroupViewModel Title="Animals Sample">
            <vm:SoundGroupViewModel.Items>
                <mo:SoundDataModel Title="Animals 1" FilePath="Animals.wav" />
            </vm:SoundGroupViewModel.Items>
        </vm:SoundGroupViewModel>
    </vm:SoundViewModel.Animals>
    <vm:SoundViewModel.Cartoons>
        <vm:SoundGroupViewModel Title="Cartoons Sample">
            <vm:SoundGroupViewModel.Items>
                <mo:SoundDataModel Title="Cartoons 1" FilePath="Cartoons.wav" />
                <mo:SoundDataModel Title="Cartoons 2" FilePath="Cartoons.wav" />
            </vm:SoundGroupViewModel.Items>
        </vm:SoundGroupViewModel>
    </vm:SoundViewModel.Cartoons>
</vm:SoundViewModel>
私が見つけたプログラムでこれをロードする最も簡単なコードは次のとおりです。
string path = @".\SampleData\SoundViewModelSampleData.xaml";
using (System.IO.StreamReader reader = new System.IO.StreamReader(path))
{
    SoundViewModel vm = XamlReader.Load(reader.ReadToEnd()) as SoundViewModel;
}
今のところ間違った場所から呼び出している可能性がありますが、次のエラーが発生しています。
System.Windows.ni.dll で、タイプ 'System.Windows.Markup.XamlParseException' の初回例外が発生しました
{System.Windows.Markup.XamlParseException: 不明なパーサー エラー: スキャナー 2147500037。 [行: 5 位置: 14] MS.Internal.XcpImports.CreateFromXaml(String xamlString, Boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers, Boolean expandTemplatesDuringParse, Boolean trimDeclaredEncoding ) System.Windows.Markup.XamlReader.Load(String xaml) で Soundboard.ViewModels.SoundViewModel.LoadData()} で
不明なパーサー エラー: スキャナー 2147500037。 [行: 5 位置: 14]
このエラーを解決できると仮定すると、これで質問 1 と 2 が処理されます (エラーを修正し、プログラムでデータをロードする)。
この問題の原因を特定できますか?
上で述べたように、私はおそらくこれを間違った場所、つまりアプリの読み込み時に作成された ViewModel 内から読み込んでいます。
namespace Soundboard.ViewModels
{
    public class SoundViewModel
    {
        public SoundGroupViewModel Animals { get; set; }
        public SoundGroupViewModel Cartoons { get; set; }
        public bool IsDataLoaded { get; set; }
        public void LoadData()
        {
            string path = @".\SampleData\SoundViewModelSampleData.xaml";
            using (System.IO.StreamReader reader = new System.IO.StreamReader(path))
            {
                SoundViewModel vm = System.Windows.Markup.XamlReader.Load(reader.ReadToEnd()) as SoundViewModel;
        }
        IsDataLoaded = true;
    }
}
}
そして、私の app.xaml.cs には次のものがあります。
public static SoundViewModel SoundViewModel
{
    get
    {
        if (_soundViewModel == null)
        {
            _soundViewModel = new SoundViewModel();
            _soundViewModel.LoadData();
        }
        return _soundViewModel;
    }
}
ランタイムに xaml だけを使用して同じことを達成し、デザインタイムに d:datacontext を使用するにはどうすればよいでしょうか。
私はいくつかの記事を読みましたが、それらはすべてwpfに関するものですが、ほとんどはユーザーコントロールのロードなどに関連しています..ビューモデルではありません
どんな助けでも大歓迎です。
ありがとう。