안녕하세요.
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; }
}