以下のコードでわかるように、ListView があります。
<ListView Grid.Row="2" MinHeight="75" x:Name="_lstvSearch" ItemsSource="{Binding Search.SearchExpressions}">
<ListView.View>
<GridView>
<GridViewColumn Header="Field name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" ItemsSource="{Binding DataContext.Fields,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"
SelectedItem="{Binding Field, Mode=TwoWay}"
DisplayMemberPath="Field.UserFriendlyFieldName"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Operator">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" ItemsSource="{Binding Field.Operators}"
SelectedItem="{Binding Operator, Mode=TwoWay}"
DisplayMemberPath="Operator"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Value">
<GridViewColumn.CellTemplateSelector>
<vm:FieldValueTemplateSelector>
<vm:FieldValueTemplateSelector.Alpha>
<DataTemplate>
<TextBox Text="{Binding Value}"/>
</DataTemplate>
</vm:FieldValueTemplateSelector.Alpha>
<vm:FieldValueTemplateSelector.Numeric>
<DataTemplate>
<igEditors:XamNumericEditor Value="{Binding Value}" />
</DataTemplate>
</vm:FieldValueTemplateSelector.Numeric>
<vm:FieldValueTemplateSelector.CheckBox>
<DataTemplate>
<CheckBox IsChecked="{Binding Value}"/>
</DataTemplate>
</vm:FieldValueTemplateSelector.CheckBox>
<vm:FieldValueTemplateSelector.DateTime>
<DataTemplate>
<igEditors:XamDateTimeEditor Value="{Binding Value}" />
</DataTemplate>
</vm:FieldValueTemplateSelector.DateTime>
<vm:FieldValueTemplateSelector.DropDownItem>
<DataTemplate>
<ComboBox ItemsSource="{Binding Value}"/>
</DataTemplate>
</vm:FieldValueTemplateSelector.DropDownItem>
<vm:FieldValueTemplateSelector.Generic>
<DataTemplate>
<TextBox Text="{Binding Value}"/>
</DataTemplate>
</vm:FieldValueTemplateSelector.Generic>
</vm:FieldValueTemplateSelector>
</GridViewColumn.CellTemplateSelector>
</GridViewColumn>
<GridViewColumn Header="AND/OR">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" ItemsSource="{Binding DataContext.ConditionLinks,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"
SelectedItem="{Binding BooleanOperator, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Remove">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Remove" IsEnabled="{Binding IsValid}" Tag="{Binding}" Click="Button_Click"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
私の問題は、最初の列フィールド名からの選択に応じて値列のCellTemplateを変更したくないということですが、これをトリガーするにはどうすればよいですか。
フィールドが選択されると、モデル cald FieldDatatype にプロパティがあり、そこから最初の列で選択されたフィールドのタイプを決定します。Value列でわかるように、CellTemplateSelector(FieldValueTemplateSelector) を設定しましたが、このセットはデータ テンプレートに対して 1 回だけで、最初の列から他のフィールドを選択しても更新されません。