2016-01-29 3 views
2

Я делаю приложение WPF, которое выполняет ту же работу SSIS, в следующем шаге я хочу, чтобы Mapp мой исходный столбец столбцам таблицы базы данных. Я хочу, чтобы достичь чего-то вроде этого enter image description hereCombobox в каждой строке DataGrid

Может кто-нибудь помочь мне найти способ связать выпадающий к сетке. Я работаю с шаблоном проектирования MVVM.

ответ

1

Вы можете видеть ComboBox, когда вы нажимаете мышь на DataGridComboBoxColumn. Давайте посмотрим пример:

Модель:

public class Person 
{ 
    public int IdPerson { get; set; } 
    public string Name { get; set; } 
} 

public class Team 
{ 
    public int IdTeam { get; set; } 
    public string NameTeam { get; set; } 
} 

ViewModel:

public class MainWindowVM 
{ 
    public MainWindowVM() 
    { 
     LoadData(); 
    } 

    private void LoadData() 
    { 
     Persons = new ObservableCollection<Person>() { 
     new Person() { IdPerson = 1, Name = "Billy" }, 
     new Person() { IdPerson = 2, Name = "Bobby" }, 
     new Person() { IdPerson = 2, Name = "Bond" } }; 

     Teams = new ObservableCollection<Team>() { 
     new Team() { IdTeam = 1, NameTeam = "Team A" }, 
     new Team() { IdTeam = 2, NameTeam = "Team B" }, 
     new Team() { IdTeam = 3, NameTeam = "Team C" } }; 
    } 


    public ObservableCollection<Person> Persons { get; set; } 
    public ObservableCollection<Team> Teams { get; set; } 
} 

}

Вид:

<Window x:Class="WPFApplication.MainWindow" 
     ...the code omitted for the brevity 
     xmlns:vm="clr-namespace:WPFApplication.ViewModel" 
     Title="a" Height="350" Width="525" WindowStartupLocation="CenterScreen"> 
    <Window.DataContext> 
     <vm:MainWindowVM/> 
    </Window.DataContext> 
    <Grid> 
     <StackPanel> 
      <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Persons}" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding Name}" /> 

        <DataGridComboBoxColumn Header="CourtType" 
              DisplayMemberPath="NameTeam" SelectedValueBinding="{Binding IdTeam}" SelectedValuePath="{Binding IdTeam}" 
              > 
         <DataGridComboBoxColumn.ElementStyle> 
          <Style TargetType="ComboBox"> 
           <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Teams}"/> 
           <Setter Property="IsReadOnly" Value="True"/> 
          </Style> 
         </DataGridComboBoxColumn.ElementStyle> 
         <DataGridComboBoxColumn.EditingElementStyle> 
          <Style TargetType="ComboBox"> 
           <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Teams}"/> 
          </Style> 
         </DataGridComboBoxColumn.EditingElementStyle> 
        </DataGridComboBoxColumn> 

        <DataGridTextColumn Binding="{Binding Name}"/> 
       </DataGrid.Columns>     
      </DataGrid> 
     </StackPanel> 
    </Grid> 
</Window> 
+0

я знаю, что есть компонент DataGridComboBoxColumn, но мой вопрос! как я могу заполнить поле со списком элементов из базы данных –

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