私は新しいプロジェクトを開始しており、この質問で推奨されている構造にプロジェクト構造を向けています。
今、私は奇妙な行動を見ています。View-XAML で datacontext を設定しているときに、実行時に見つかりません ( を取得しますXamlParseException
)。コードビハインド ファイルのコンストラクターで設定すると、すべて正常に動作します。
これは、異なるアセンブリを使用するときの公式の (文書化された) 動作ですか、それとも何か間違っていますか?
コード:
動作しない:
MainView.xaml:
<UserControl x:Class="ViewsRoot.Views.MainView"
xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"
xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot">
<UserControl.DataContext>
<viewModels:ShellViewModel />
</UserControl.DataContext>
MainView.xaml.cs
public MainView()
{
InitializeComponent();
// No DataContext set in codebehind-file
}
働く:
MainView.xaml:
<UserControl x:Class="ViewsRoot.Views.MainView"
xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"
xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot">
<!--<UserControl.DataContext>
<viewModels:ShellViewModel />
</UserControl.DataContext> -->
MainView.xaml.cs:
public MainView()
{
InitializeComponent();
DataContext = new ViewModelsRoot.ShellViewModel();
}
アップデート:
例外テキストは次のとおりです。
{"ファイルまたはアセンブリ \" ViewModelsRoot, PublicKeyToken = null \ "またはその依存関係の 1 つが見つかりませんでした。システムは指定されたファイルを見つけることができません。"}
そして、私が見ることができる唯一の内部例外はSystem.IO.FileNotFoundException
.
更新 2:
コメントありがとうございます。名前空間を忘れていません。ここではコードを表示するために短くしましたが、ダブルチェックとトリプルチェックを (再度) 行いました。DataContexts 名前空間も IntelliSense によって埋められます。全体<viewModels:ShellViewModel />
はインテリセンスで書いています。つまり、設計時に検出されます... ...それ以上のアイデアはありますか?
更新 3: DataContext を同じアセンブリ内のクラスにバインドできるため、xaml は「正しく」解析されます。