ComboBox没有绑定在datagrid中

时间:2011-08-08 11:04:45

标签: wpf datagrid combobox datacontext

我有一个CombinBox绑定到BindingList与字符串。它工作正常。

public BindingList<string> MyList
{
    get
    {
        BindingList<string> list = new BindingList<string>();
        list.Add("one");
        list.Add("two");
        list.Add("three");

        return list;
    }
}

XAML:

<ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

当我将相同的代码放入WPF 4数据网格时,它不再起作用了(但是数据网格外的组合仍然运行正常):

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="MyCmbBox" ItemsSource="{Binding Path=MyList}">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}" />
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

为什么呢?谢谢

1 个答案:

答案 0 :(得分:1)

因为如果DataGrid ComboBox具有不同的DataContext - 网格行数据项,它没有MyList属性。

要解决此问题,您可以使用RelativeSource绑定绑定到网格的DataContext

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox x:Name="MyCmbBox" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.MyList}">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}" />
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>