Решение зависит от структуры вашего представления. Если у вас есть основное подробное представление, вы должны создать подструктуру, которая ожидает сотрудника ViewModel в качестве DataContext и связать его с выбранным в данный момент сотрудником. При этом вы получите правильный ViewModel для вашего представления.
Если вы переходите на новую страницу, самый простой подход может состоять в том, чтобы передать View id сотрудника, которого вы хотите показать, а затем в коде позади вызвать метод для вашей модели представления - которую вы можете получить из свойства DataContext. - загрузить нужного сотрудника из базы данных или службы.
Кроме того, вы можете хранить текущего сотрудника в доступной переменной приложения. Например. статическая переменная в вашем классе приложения, одноэлементный или статический класс, хранящийся в ваших ресурсах или в вашем ViewLocator (во всех случаях вам может потребоваться предоставить пустую ViewModel для сотрудника, когда ни один из сотрудников не выбран или препятствует открытию View).
Редактировать
Если набор ViewModels привязан к DataGrid и проблема связана с привязкой команды, это может быть возможным решением:
Поместите команду в ViewModel, которая содержит коллекцию (то есть свойство, которое связано с Источником Items в DataGrid). Затем выполните команду на этом высоком уровне ViewModel. Теперь вы можете использовать привязку RelativeSurce для доступа к этому более высокоуровневому ViewModel через родительское свойство DataContext DataGrid. Теперь вы можете привязать команду к своей кнопке и передать DataContext текущей строки в качестве параметра команды - команда, очевидно, должна ожидать этот параметр.
Редактировать 2 :
Forgot Silverlight не поддерживает все режимы RelativeSource, однако поддерживает привязку к названному элементу, поэтому должно работать следующее ...
Предположения:
- ViewModel более высокого уровня называется "EmployeeListViewModel"
- У него есть свойство Employees, содержащее список EmployeeViewModels
- DataContext элемента, содержащего DataGrid, установлен в EmployeeListViewModel
Код:
<DataGrid x:Name="dgEmployees" ItemsSource="{Binding Empoyees}" ...>
...
<Button x:Name="myButton" Width="20" Height="15" HorizontalAlignment="Center"
VerticalAlignment="Center" Margin="5" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand
Command="{Binding ElementName=dgEmployees, Path=DataContext.MyButtonCommand}"
CommandParameter="{Binding}"
PassEventArgsToCommand="False"/>
</i:Interaction.Triggers>
</Button>
...
</DataGrid>