1

以下のコードでわかるように、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 回だけで、最初の列から他のフィールドを選択しても更新されません。

4

0 に答える 0