C#WPF DataGrid:DataGridComboxBoxColumn Binding ItemsSource失败

时间:2017-04-21 08:49:29

标签: c# wpf combobox binding datagrid

我想在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>

1 个答案:

答案 0 :(得分:1)

试试这个:

<Setter Property="ItemsSource" Value="{Binding DataContext.Projects, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>

DataContextComboBox的{​​{1}}是DataGridComboBoxColumn DataGrid中的对应对象。

如果在视图模型中定义了ItemsSource集合,则需要为绑定指定Projects才能生效。