我想在ComboBox
上显示DataGrid
。但ComboBox
未加载ObservableCollection
。我的ObservableCollection
'项目'在我的ViewModel上定义。问题不在于DataContext
。但是当我在ComboBox
之外定义DataGrid
时,绑定有效。有谁知道我的问题在哪里?
视图模型:
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>
答案 0 :(得分:1)
试试这个:
<Setter Property="ItemsSource" Value="{Binding DataContext.Projects, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
DataContext
中ComboBox
的{{1}}是DataGridComboBoxColumn
DataGrid
中的对应对象。
如果在视图模型中定义了ItemsSource
集合,则需要为绑定指定Projects
才能生效。