2017-02-15 3 views
0

次のコードは、NavigationWindowを使用するWPFプロジェクトにあります。コードビハインドにはいくつかのオーバーライドメソッドがあります。以下のオーバーライドでは、 'favoritesItem'にアクセスする必要があります。 'favoritesItem'は別の.XAMLファイルにあります。明らかに私はそれに適切にアクセスしていません。異なるXAMLファイル内のコードの背後にあるXAML要素はどのようにしてアクセスされますか?

Protected Overrides Sub OnClosed(e As EventArgs) 
    MyBase.OnClosed(e) 
    ' Persist the list of favorites 
    Dim f As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly() 
    Using stream As New IsolatedStorageFileStream("myFile", FileMode.Create, f) 
    Using writer As New StreamWriter(stream) 
     For Each item As TreeViewItem In DirectCast(System.Windows.Application.Current.Properties("favoritesItem"), TreeViewItem).Items 
     writer.WriteLine(TryCast(item.Tag, String)) 
     Next 
    End Using 
    End Using 
End Sub 

このエラーは次のとおりです:

Object reference not set to an instance of an object 

異なるファイルに[編集し] XAML要素にアクセスするための適切な方法は何ですかこれはオーバーライドのですか?

+0

[NullReferenceExceptionとは何か、それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Codexer

+0

オブジェクトがNullReferenceExceptionを返していることを理解していますが、プロパティに正しくアクセスしていないためそうではありませんか?プロパティは実際にアクセスされていないため、キャストには何も返されません。プロパティリファレンスを修正すると、TreeViewからデータを受け取ります。私が理解できないことは、そのPropertyにアクセスする方法です。 – Alan

答えて

1

ここで何をしようとしていますか?投稿したコードは、「別のファイルのXAMLオブジェクト」にアクセスすることとは関係ありません。 Application.Propertiesプロパティは、アプリケーションのさまざまな部分間でスレッドセーフな方法でデータを共有するための単なる辞書です。 私の経験では非常にまれにしか使用されていません。 - 実際にははありません。が使われています。おそらく 'favoritesItem'をディクショナリに最初に追加していないため、null例外が発生しています。

別のクラスから名前付きXAML要素にアクセスするには、パブリックプロパティで公開する必要があります。 (名前付きXAML要素は、定義するクラスにプライベートメンバーフィールドを作成します)。

+0

あなたは私の問題を特定しました。私はプロジェクトに従っていて、そのプロパティを辞書に手動で読み込まなければならないことに気付かなかった。 「別のファイルのオブジェクト」に関する私の言い回しはおそらくあまり書かれていなかったでしょう。私は実際に別のページから要素(TreeViewItems)のデータにアクセスしようとしていました。だから、それをタイトルと投稿の要素と呼ぶ方が良いでしょうか?ところで、名前付きXAML要素を公開するにはどうすればよいですか? – Alan

+0

答えとして、 "別のクラスの名前付きXAML要素にアクセスするには、パブリックプロパティで公開する必要があります" – Schneider

関連する問題