Получение значения метки, в которой привязано значение элемента - PullRequest
0 голосов
/ 05 марта 2012

В моем текущем сценарии (WPF, MVVM) у меня есть пользовательский элемент управления, на котором размещена диаграмма visio. Этот пользовательский элемент управления находится в представлении рядом с рядом меток и элемента сетки данных.

Пользовательский элемент управления содержит объект DependencyProperty SelectedNode, значение которого обновляется в соответствии с информацией, полученной из диаграммы Visio. Содержимое меток связано, чтобы отображать информацию, содержащуюся в SelectedNode (например, идентификатор, имя):

<Label Grid.Row="1" Grid.Column="1" x:Name="lbNodeIdValue" HorizontalAlignment="Left"
                                           Content="{Binding ElementName=visioControlUC, Path=SelectedNode.Id, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>

Каждый раз, когда я изменяю выбор на диаграмме, содержимое метки изменяется, как и ожидалось.

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

Я попытался использовать свойство MultiBinding в элементе Content метки и создать вторую привязку с Mode=OneWayToSource, чтобы установить значение Content метки для свойства, которое я определил в модели представления класс.

Каким будет правильный способ получить это значение в моем классе viewmodel?

Спасибо, Адриан

1 Ответ

1 голос
/ 05 марта 2012

В идеале ViewModel вашего Datagrid должен получить значение выбранной метки от другого ViewModel. Вам не следует полагаться на Views для передачи данных приложения между ViewModels.

Звучит так, как будто значение SelectedNode происходит от UserControl, а не ViewModel, поэтому вам нужно привязать UserControl.SelectedNodeId к ViewModel где-нибудь, чтобы у ViewModels был доступ к этим данным

<local:myUserControl x:Name="visioControlUC" 
                     SelectedNode="{Binding SelectedNodeId}" />

Если значение требуется более чем одному ViewModel, я настоятельно рекомендую какую-либо систему событий, такую ​​как MVVM Light Messenger или Prism EventAggregator. Это позволит вашему ViewModels подписаться на что-то вроде SelectedNodeChangedEventMessage, а ViewModel, который на самом деле содержит SelectedNodeId, может транслировать это сообщение в любое время, когда изменяется значение. Вы можете найти пример обоих в моем блоге о Связь между ViewModels .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...