WPF DataGridComboBoxColumn itemsSource 질문드립니다.

안녕하세요.

DataGrid에 combobox 컬럼을 만들었습니다.

DataGrid와 ComboboxColumn의 바인딩 대상이 서로 달라 콤보박스에 별도로 지정을 해줬는데

아무런 값이 표현이 되질 않습니다.

검색을 해보니 ComboxColumn 아이템소스 버그인지 ElementStyle로 지정을 해줘야 한다고 해서

적용을 해보았는데도 여전히 표기가 되질 않네요. 바인딩에서는 에러도 없는데 어찌 해결을 해야할까요??

아참 Winform의 그리드뷰는 displaymember를 따로 지정이 가능했는데 WPF에서는 안되는건지요??

아래는 문제부분만 간략히 추린 소스입니다.

정보부탁드립니다~!


<xaml.cs 파일 >
 
<DataGrid x:Name="dataGrid" HorizontalAlignment="Center" Height="513" Grid.Row="1" VerticalAlignment="Top" Width="1518" HorizontalGridLinesBrush="LightGray" VerticalGridLinesBrush="LightGray" ItemsSource="{Binding DataTable1}" Margin="0,18,0,0" HeadersVisibility="Column">
<DataGrid.Columns>
 <DataGridCheckBoxColumn Width="0.1*" Header="출 력" Binding="{Binding AA}"></DataGridCheckBoxColumn>
 <DataGridTextColumn Width="0.1*" Header="이동순번" Binding="{Binding BB}"></DataGridTextColumn>
 <DataGridComboBoxColumn Width="0.3*" Header="업 체">
      <DataGridComboBoxColumn.ElementStyle>
         <Style TargetType="{x:Type ComboBox}">
             <Setter Property="ItemsSource" Value="{Binding DataContext.BusinessList,RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
         </Style>
     </DataGridComboBoxColumn.ElementStyle>
 
 </DataGridComboBoxColumn> 
</DataGrid.Columns>

<CS 소스>

 public class MainWindowViewModel : INotifyPropertyChanged
 {
     private DataTable dataTableP;
     private ObservableCollection<business> busineessListP;

     public event PropertyChangedEventHandler? PropertyChanged;

     public DataTable DataTable1 
     { 
         get { return dataTableP; } 
         set { dataTableP = value; OnPropertyChanged("DataTable1"); }
     }

     public ObservableCollection<business> BusinessList 
     {
         get { return busineessListP; }
         set { busineessListP = value; }
     }


     public MainWindowViewModel()
     {
         dataTableP = new DataTable();

         dataTableP.Columns.Add("AA");
         dataTableP.Columns.Add("BB");
         dataTableP.Columns.Add("CC");
         dataTableP.Columns.Add("DD");
         dataTableP.Columns.Add("EE");
         dataTableP.Columns.Add("FF");
         dataTableP.Columns.Add("GG");

         for (int i = 0; i < 50; i++) 
         {

             dataTableP.Rows.Add(i.ToString(), i.ToString(), i.ToString(), i.ToString(), i.ToString(), i.ToString(), i.ToString());


         }

         busineessListP = new ObservableCollection<business>();

         int a = 65;

         for (int i = 0; i < 10; i++) 
         {
             busineessListP.Add(new business() { id = Convert.ToString(a), name = Convert.ToString(a) });
             a++;
         }

         //MessageBox.Show(busineessListP.Count.ToString());


     }

     private void OnPropertyChanged(string propertyName)
     {
         if (PropertyChanged != null) 
         {
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
         }
     }

    
 }
 public class business
 { 
     public string name {get; set; }
     public string id {get; set; }
     
 }
<DataGridComboBoxColumn ItemsSource="{BInding }"/>

@Tokhi 이렇게 직접 바인딩 해주시면 됩니다.

안녕하세요. 직접 바인딩을 해줬더니 dataGrid에 이미 바인딩이 되어 있어서 그런지 계속 표기가 되질 않습니다. 아마도 바인딩 대상이 서로 달라서 그런거 같은데 dataGrid 바인딩 객체를 수정해서 해결했습니다. 감사합니다~!