2

XAMLで次のCollectionViewSource定義を取得しました。

 <UserControl.Resources>
        <CollectionViewSource x:Key="PersonsViewSource" Source="{Binding AvailablePersons}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="Surname" Direction="Ascending" />
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
    </UserControl.Resources>

このCVSにバインドされたコンボボックスを取得し、次のようなコードからビューにアクセスしたいと思います。

(Resources["PersonsViewSource"] as CollectionViewSource).View

ただし、コンストラクターでアクセスしようとしてもInitializeComponent()Loaded eventハンドラーのビューとソースはまだnullです。

バインディングがすでに行われているにもかかわらず、アプリケーションがブラウザーに表示され、ブレークポイントをどこかに置いた場合、ビューとソースはnullではなくなります。

では、ソースはいつ正確に設定されますか?アプリケーションをロードする段階で、どこからビューにアクセスできますか?

静的リソースバインディングはいつ設定されますか?これは、実際にはビューソースに関するものではない一般的なバインディングの質問ですか?

4

1 に答える 1

1

この行が解析されるため、バインディングは初期化中に設定されます。

<CollectionViewSource x:Key="PersonsViewSource" Source="{Binding AvailablePersons}">

ただし、そのバインディングは、その時点でAvailablePersonsプロパティに存在するすべてのデータを指します。関連する非同期ロードが完了するまで、空のままになります。

Silverlightを使用すると、ビジュアルツリーが表示されるときではなく、データが読み込まれたイベントに一般的に関心があります。

AvailablePersonsのデータを取得する方法について詳しく教えてください。

于 2011-06-10T23:09:32.430 に答える