WPF - 在按钮单击时使选定的列表视图列可编辑

时间:2010-04-29 08:40:12

标签: wpf

我有一个listView,每个列都有一个gridview演示文稿和TextBlocks。我想通过在用户单击编辑按钮时用TextBoxes和ComboBox替换文本块来使所选行可编辑。我尝试通过设置切换控件可见性的样式来做到这一点:

<Style x:Name="ItemDisplayStyle" TargetType="{x:Type TextBlock}" x:Key="ItemDisplayStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=dislayMode}" />
    </Style>
    <Style x:Name="ItemEditStyle" TargetType="{x:Type FrameworkElement}" x:Key="ItemEditStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=editMode}" />
    </Style>

displayMode和editMode是代码隐藏中设置的Visibility属性。 并且在xaml中更低:

<GridViewColumn Header="Date de début" Width="80">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <TextBlock Margin="-6,0"
                                           HorizontalAlignment="Stretch" TextAlignment="Center"
                                           Text="{Binding Path=DateDebut, Mode=TwoWay}"
                                           Style="{StaticResource ItemDisplayStyle}" />
                                <TextBox   x:Name="tbDateDebut" Margin="-6,0"
                                           HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" 
                                           Text="{Binding Path=DateDebut, Mode=TwoWay}"
                                           Style="{StaticResource ItemEditStyle}" />
                            </Grid>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

我的问题是在UI级别似乎没有检测到代码隐藏中的'editMode'和'displayMode'。

此外,即使我让它工作,我也不知道如何只将它应用于选定的行。 我可以通过将可见性值与ListView绑定来单独执行此操作,以便当用户选择一行时,她/他获得该行上的可编辑控件,但我真的只想在他们单击按钮时允许这样做。

1 个答案:

答案 0 :(得分:0)

您是否在进行更改后刷新了网格的内容? 您可以使用Grid.GetColumn方法并发送发送方对象,即编辑按钮(我认为每个列都是独立的)然后可能使用VisualTreeHelper来获取该列中的文本框和组合框。

希望这有帮助。

另外,为什么不使用TextBox的'IsReadOnly'属性而不是替换TextBlock?根据您的要求使其成为真或假。