我有一个数据网格,其中一列是标题。我希望能够编辑标题,并且编辑成为一个组合框,其中包含基于行所代表的人的性别的标题列表。所以说一个人会在男人的下降中有“先生”,然后另一个会有“女士”,“太太”。女性的“小姐”。因此,我无法找到一种方法来使其工作,并根据绑定对象的值更改项目源。这里有一些内容(我到目前为止......它适用于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>
感谢您的帮助!!
答案 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>