Различные контексты данных в форме SL3 - PullRequest
1 голос
/ 18 июня 2009

Я написал пользовательский элемент управления Silverlight 3, который использует класс в качестве контекста данных (шаблон MVVM). Я хочу разместить этот элемент управления на другом элементе управления (форме) через XAML. Дочерний элемент управления предоставляет свойство зависимости, которое при настройке через XAML позволяет отображать подробную информацию.

Так, например, дочерний элемент управления отображает данные о заказе, и я хочу разместить его в форме, показывающей пользовательские заказы. При выборе заказа значение выбранного элемента в родительском элементе управления (список заказов) представляет собой данные, привязанные к дочернему элементу управления, чтобы показать подробности.

Проблема в том, что обработчик OnChanged свойства зависимого элемента дочернего элемента управления никогда не вызывается. Если я не устанавливаю контекст данных для дочернего элемента (поэтому он использует контекст данных родителя), все работает нормально, но когда я устанавливаю другой контекст данных, он выходит из строя.

Ответы [ 3 ]

0 голосов
/ 18 июня 2009

Это правда, что когда установлен DataContext родительского элемента управления, он распространяется на все его дочерние элементы управления. Но у дочернего элемента управления есть возможность переопределить это поведение, установив свой собственный DataContext (что вы, похоже, делаете в своем примере). Следовательно, по правилу предпочтений, DataContext дочернего элемента управления получает больше предпочтений, и поэтому он переопределяет родительский. Кроме того, поскольку DataContext дочернего элемента никогда не изменяется после его первоначальной установки, DP никогда не вызывается.

0 голосов
/ 07 июля 2009

Так что я подумал об этом еще немного, и я понимаю, что происходит, но я думаю, что это очень запутанно, и не сделано правильно. Если я выполняю привязку данных к элементу управления на главной странице, он должен использовать контекст этой страницы для привязки. И связывание, которое я делаю внутри элемента управления, должно использовать контекст элемента управления.

То, как это работает, теперь использует контекст элемента управления независимо от того, куда я помещаю выражение привязки (если только я не делаю привязку E2E, тогда он использует контекст главной страницы). Это глупо для меня. Но, по крайней мере, теперь я это понимаю.

Я решил проблему, используя привязку Элемент к Элементу, и заставил ее работать. Я надеюсь, что команда SL изменит это поведение.

0 голосов
/ 18 июня 2009

В идеале, ваша ViewModel должна быть для внешнего UserControl, а свойство ViewModel будет DataContext для Inner / Child userControl

...