i want to display a ComboBox on my DataGrid. But the ComboBox does not load the ObservableCollection. My ObservableCollection 'Projects' is on my ViewModel defined. The problem is not the DataContext. But when I define the ComboBox outside of my DataGrid, the binding works. Does anyone have an idea where my problem is?
ViewModel:
public Project SelectedProject
{
get { return _project; }
set
{
if (_project != value)
{
_project = value;
OnPropertyChanged();
_actions = _database.LoadActions(SelectedProject.Id);
OnPropertyChanged(() => Actions);
}
}
}
public ObservableCollection<Project> Projects
{
get { return _database.LoadProjects(); }
}
XAML:
<DataGridComboBoxColumn Header="Projekt:" Width="140" DisplayMemberPath="Name">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Projects, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
<Setter Property="SelectedItem" Value="{Binding SelectedProject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Projects, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<Setter Property="SelectedItem" Value="{Binding SelectedProject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Setter Property="IsDropDownOpen" Value="True" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
UpdateSourceTrigger=PropertyChangedon a OneWay binding is pointless. It has no effect, because it controls how a TwoWay or OneWayToSource Binding updates the source property. Besides that, settingMode=OneWayon the ItemsSource Binding andMode=TwoWayon the SelectedItem Binding is redundant. These values are the default already.