私は現在、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に関するものですが、ほとんどはユーザーコントロールのロードなどに関連しています..ビューモデルではありません
どんな助けでも大歓迎です。
ありがとう。