2011-06-20 27 views
0

コードビハインドファイルでXAMLで宣言された名前付きオブジェクトを見つける際に問題が発生しています。XAML FindNameで指定された名前のない要素

ビュー内からViewModelを初期化したいとします。ときに私私がnull参照の例外を取得しかし、しかし、私はまた、

<navigation:Page.DataContext> 
    <vm:JobsViewModel x:Name="ViewModel" /> 
</navigation:Page.DataContext> 

(私は私のViewModelから簡単に行うことができないなど、イベントの処理、基本的には、ナビゲーションのサポートのために)ファイルの後ろに自分のコード内のViewModelへの参照が必要「の後ろに私のコードでのViewModelにアクセスしようとは:m

Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs) 
     MyBase.OnNavigatedTo(e) 
     ViewModel.Initalize() '<-- Exception here 
    End Sub 

いくつかのより多くの研究は、という帰InitalizeComponentリターンの 『ViewModelに』のためのFindNameコールを示しています。私はXAMLネームスコープなどを読んでみましたが、私が見る限り、これは単純なケースで、ちょうどいいんですか?

これがなぜ失敗するのかについての説明は、非常に高く評価されます。ありがとう!

答えて

1

あなたのJobsViewModelはビジュアルツリーの一部ではないので、FindNameは見つからないためです。代わりに、DataContextプロパティから取得できます。

+0

FindNameのドキュメントを理解しているので、必ずしもVisual Treeと同じではないXAMLツリーを検索します。そして、私はx:Sample nameを使ってサンプルを見たと思います。私はFindNameのように動作すると想定していたBinding.ElementNameを使ってそれを参照しています... – aKzenT

+0

そして、DataContextは動作しますが、x:Name、FindName(、ElementName)の仕組みを理解することに興味があります。将来の参照のために、そしてより多くの間違いを避けるために一緒に。 – aKzenT

+0

@ aKzenT、[この記事を見る](http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and-visual-trees-in-wpf.aspx )、それは私がこの件で見た中で最高です –

関連する問題