2016-02-18 3 views
0

Запись приложения WPF с использованием шаблона MVVM. У меня есть привязка данных к модели данных, которая создает набор данных для поискового запроса. Одно из полей, отображаемых в datagrid, является уникальным ссылочным номером. Когда я нажимаю на запись в datagrid, я хочу заполнить некоторые текстовые поля дополнительными данными о человеке, выбранном с использованием ссылочного номера этого человека.Заполнение текстовых полей на основе выбранной записи в datagrid

Вот XAML для моего DataGrid:

 <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" > 
      <DataGrid x:Name="dgPersonal" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding UserSearchCollection}" RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True" IsSynchronizedWithCurrentItem="True"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Width="50" x:Name="RefNo" Binding="{Binding RefNo}" Visibility="Hidden" /> 
        <DataGridTextColumn Header="Name" Width="125" x:Name="FullName" Binding="{Binding FullName, Mode=OneWay}" /> 
        <DataGridTextColumn Header="Phone" Width="75" x:Name="Voice" Binding="{Binding Voice}" /> 
        <DataGridTextColumn Header="Preferred First Name" Width="125" x:Name="FirstName" Binding="{Binding PreferredFirstName}" /> 
        <DataGridTextColumn Header="Preferred Last Name" Width="125" x:Name="LastName" Binding="{Binding PreferredLastName}"/> 
        <DataGridTextColumn Header="DOS" Width="90" x:Name="DateOfSeparation" Binding="{Binding DateOfSeparation, StringFormat=M/d/yyyy}" SortMemberPath="DateOfSeparation" /> 
       </DataGrid.Columns> 
      </DataGrid> 
     </Grid> 

Вот код НОО поиск с моей точки зрения модели если (string.IsNullOrWhiteSpace (SearchString)) возвращение;

 var search = dal.PersonalRepository.GetAll(); 

     if (Regex.IsMatch(SearchString, @"^(\(?\d{3}?\)?)?[-\.\s]?\d{3}[-\.\s]?\d{4}$")) 
      search = phoneSearch(search); 
     else if (Regex.IsMatch(SearchString, @"^r?\d+$")) 
      search = refNoSearch(search); 
     else if (Regex.IsMatch(SearchString, @"^e?['C'||'c']\d+$")) 
      search = empIdSearch(search); 
     else if (Regex.IsMatch(SearchString, @"^(\w\d{2}|\wDC|O\w{2})(\w{4})$")) 
      search = casCodeSearch(search); 
     else 
      search = nameSearch(search); 

     if (!ShowSeparatedUsers) 
      search = search.Where(x => x.DateOfSeparation == null); 

     //  .Where(p => p.FirstName.Trim().Contains(_searchParam1) && p.LastName.Trim().Contains(_searchParam2) 
     //     || 
     //     (p.FirstName.Trim().Contains(_searchParam2) && p.LastName.Trim().Contains(_searchParam1)) 


     UserSearchCollection = new ObservableCollection<User>(search.Select(x => new User { 
      RefNo = x.RefNo, 
      Voice = x.Voice.Trim(), 
      FirstName = x.FirstName.Trim(), 
      LastName = x.LastName.Trim(), 
      PreferredFirstName = x.PreferredFirstName.Trim(), 
      PreferredLastName = x.PreferredLastName.Trim(), 
      DateOfSeparation = x.DateOfSeparation, 
      EmployeeId = x.EmployeeId.Trim() 
     }).ToList()); 
     IsSearched = true; 

Моя модель называется User, и это то, что он выглядит как

public class User : ObservableObject 
{ 
    public int RefNo { get; set; } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public string Suffix { get; set; } 
    public string PreferredLastName { get; set; } 
    public string PreferredFirstName { get; set; } 
    public string Exemptions { get; set; } 
    public string Voice { get; set; } 
    public DateTime? DateOfSeparation { get; set; } 
    public string EmployeeId { get; set; } 
    public string Caspar { get; set; } 
    public string Exempt { get; set; } 
    public string City { get; set; } 
    public string Title { get; set; } 
    public string Budcat { get; set; } 
    public string Posnno { get; set; } 
    public string Rptto { get; set; } 
    public string Cascode { get; set; } 
    public string Budorg { get; set; } 
    public string NTE { get; set; } 
    public string FullName { 
     get { 
      return Utils.FormatFullName(LastName, FirstName, Suffix, PreferredLastName, PreferredFirstName, 
       Exemptions); 
     } 
    } 
} 

Это пример одного из текстовых полей, которые я хочу, чтобы заполнить данными при выборе лица в DataGrid.

<TextBox Style="{StaticResource textboxStyleBlue}" Grid.Row="1" Grid.Column="1" Width="200" IsReadOnly="True" /> 
+0

Рассмотрите вопрос об этом вопросе - это может помочь http://stackoverflow.com/questions/16693479/datagrid-rows-loop – Takarii

ответ

0

Вы можете использовать привязку к DataGrid.SelectedItem:

  1. Дайте DataGrid название: х: Name = "сетка"
  2. Set TextBox Text = {Binding ElementName = сетки, Path = SelectedItem.LastName}

Я думаю, что это сработает для вас.

Смежные вопросы