1

デバッガーで単体テストを実行するときに、オブジェクトまたはプロパティを見ると null 参照が発生する理由を誰でも説明できますか? 例えば:

1      [TestMethod]
2            [Description("Test to confirm that upon initial class creation, the login view is loaded as the default content for the TaskRegion.")]
3            public void Shell_Initialisation_LoginViewIsLoadedByDefault()
4            {
5                Shell shell = new Shell();
6    
7                TestPanel.Children.Add(shell);
8    
9                Shell_ViewModel viewModel = shell.DataContext as Shell_ViewModel;
10   
11               Assert.IsTrue(viewModel.TaskRegionContent is ContentControl);
12   
13               EnqueueTestComplete();
14           }

[9 行目] viewModel フィールドをシェル ビューの DataContext に設定すると、「オブジェクトがインスタンスに設定されていません...」という例外が発生します。私のdatacontextがshell.xaml.csに設定されていることは確かです。ファイル全体:

1    using System.Windows;
2    
3    namespace eg.WorkManager.UI.Shell
4    {
5        public partial class Shell
6        {
7    
8            public Shell()
9            {
10               InitializeComponent();
11               this.Loaded += new RoutedEventHandler(Shell_Loaded);
12           }
13   
14           void Shell_Loaded(object sender, RoutedEventArgs e)
15           {
16               this.DataContext = new Shell_ViewModel();
17           }
18       }
19   }
20   

私は何か間違ったことをしていることを知っていますが、誰かが何を説明できますか?

ありがとう、マーク

4

2 に答える 2

2

コントロールが実際にビジュアル ツリーに読み込まれるときに発生するイベントDataContext中を設定しています。Loadedしたがって、DataContextビューを作成しただけなので、設定されません。デバッガーをアタッチして単体テストを実行し、Loadedハンドラーにブレークポイントを設定することで、簡単に確認できます。

于 2009-04-08T13:11:39.553 に答える
2

問題は、Shell オブジェクトを分離してインスタンス化していることだと推測しています。Shell_Loaded (Loaded イベント) が呼び出されていることを確認しましたか?

ビュー モデルを xaml の静的リソースとして作成しないのはなぜですか? MVVM では、通常、xaml で静的リソースとして作成し、LayoutRoot でデータ コンテキストとしてバインドします... すべて xaml で行います。

于 2009-04-08T13:12:55.917 に答える