Cześć.
Z WPF mam do czynienia od niedawna, dopiero się uczę. Napotkałem pewien problem i chciałbym Was poprosić o pomoc.
Załóżmy, że mam listę obiektów w kolekcji i chciałbym je wyświetlić w Datagrid:
public class TargetOS
{
public bool Select { get; set; }
public string Name { get; set; }
}
private ObservableCollection<TargetOS> targetOSList;
public ObservableCollection<TargetOS> TargetOSList
{
get
{
return targetOSList;
}
set
{
targetOSList = value;
OnPropertyChanged("TargetOSList");
}
}
Z prostym wyświetleniem zawartości kolekcji w DataGrid nie mam problemu, robię to w ten sposób:
<DataGrid Grid.Row="6" Grid.Column="1" ItemsSource="{Binding Path=TargetOSList}" VerticalAlignment="Top" BorderThickness="0" ColumnWidth="*"></DataGrid>
Binduje ItemSource z kolekcją i wszystko jest w porządku - dla property typu bool w datagrid pojawia się checkbox.
Teraz chciałbym zdefiniować template dla kolumny w DataGrid tak aby móc ustawić szerokość danej kolumny, ale co najważniejsze w definicji template-u chiałbym się odnosić do poszczególnych property obiektów z kolekcji (Select oraz Name z klasy TargetOS).
Coś mniej lub bardziej podobne do tego rozwiązania:
<DataGrid Grid.Row="6" Grid.Column="1" ItemsSource="{Binding Path=TargetOSList}" VerticalAlignment="Top" BorderThickness="0" ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
<DataGridTemplateColumn Header="Select">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Select}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Pytanie brzmi, czy w definicji template-u dla kolumn, tam gdzie binduje dane mogę w jakiś sposób odnieść się do property obiektów z kolekcji wskazanej w ItemsSource?
Takie odwołanie nie działa:
Binding Path=TargetOSList.Name
Binding Path=TargetOSList.Select
i wcale mnie to nie dziwi, ale chciałem Wam dać obraz tego co chce uzyskać.
Druga sprawa. Gdy definiuje tempalte dla DataGrid i jednocześnie wskazuje kolekcję w ItemSource to wówczas otrzymuje cztery kolmny zamiast dwóch (Select oraz Name) - wyświetla zarówno nazwy property z klasy TargetOS jak i nazwy kolumn zdefiniowanych w template.
Czy w jakiś spobób mogę osiągnąć to co opisałem powyżej?
Pozdrawiam.