1

メンバーで満たされた DataGrid を持つ UserControl があります。DataGrid.ItemsSource は、モデルの ObservableCollection にバインドされています。DataGrid.SelectedItem は、モデルの SelectedMember フィールドにバインドされます。SelectedMember._set は NotifyPropertyChanged を呼び出し、イベントは公開された DependencyProperty の SetValue() を呼び出します。

この UserControl はページ上にあります。そのページにもビューモデルがあります。UserControl.CurrentMember を viewmodel.SelectedMember にバインドしようとしていますが、変更されていません。CurrentMember.MemberName をテキスト ボックスにバインドすると、ボックスにメンバー名が表示されるので、UserControl が DependencyProperty を正しく公開しているように見えます。しかし、モデルにバインドしても更新されません。

クロスバインディングが見つかりません。TextBox へのバインドは正常に機能します。ページ モデルのフィールドは新しいため、何もバインドされていません。

何が問題なのですか?ページ モデルのフィールドは DependencyProperty である必要がありますか? その場合、コンパイラはエラーを出します。

コードサンプルを入手してみますが、非常に根深いので、数行のコードを投稿することはできません.

トム P.

4

1 に答える 1

0

コードを調べて、新しいプロジェクトで問題を再現しようとした後、問題が見つかりました。

UserControl で、DataContext をモデルに設定します。しかし、ページに配置すると UserControl.DataContext が上書きされます。私がする必要があったのは、MainGrid に名前を付け、MainGrid の DataContext を UserControlModel に設定することでした。MainGrid は UserControl に対してプライベートであるため、上書きされません。今では素晴らしく機能します。

于 2012-09-12T03:52:00.427 に答える