根据ItemsSource(WPF)中的值更改DataGrid中ComboBox的内容

时间:2010-08-13 18:46:01

标签: wpf

我有一个数据网格,其中一列是标题。我希望能够编辑标题,并且编辑成为一个组合框,其中包含基于行所代表的人的性别的标题列表。所以说一个人会在男人的下降中有“先生”,然后另一个会有“女士”,“太太”。女性的“小姐”。因此,我无法找到一种方法来使其工作,并根据绑定对象的值更改项目源。这里有一些内容(我到目前为止......它适用于comboBox的itemsource但触发器不会更新源代码。我不确定是否有更好的方法来执行此操作我还查看了模板选择器,但我愿意接受任何建议。

    <my:DataGrid AutoGenerateColumns="False" Margin="30,20,130,77" Name="dataGrid1">
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn Header="Title" MinWidth="100">
                <my:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path = Sex}" Value ="F">
                                <Setter Property="ComboBox.ItemsSource" Value="{StaticResource Titles2}" />
                            </DataTrigger>
                        </DataTemplate.Triggers>
                        <ComboBox ItemsSource="{StaticResource Titles}" 
                                  SelectedItem="{Binding Title}" />
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellEditingTemplate>
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Title}" />
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>

感谢您的帮助!!

1 个答案:

答案 0 :(得分:3)

问题是触发器是在ContentPresenter上设置属性,而不是在ComboBox上。当您编写Property="ComboBox.ItemsSource"时,您正在限定要设置的依赖项属性,但它仍在ContentPresenter上设置,并且不会被ComboBox继承。您可以在ComboBox上设置一个属性,方法是给它一个Name属性并在Setter上设置TargetName:

<DataTemplate>
    <ComboBox ItemsSource="{StaticResource Titles}" 
              Name="myComboBox"
              SelectedItem="{Binding Title}" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path = Sex}" Value ="F">
            <Setter TargetName="myComboBox" Property="ItemsSource"
                    Value="{StaticResource Titles2}" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>