WPF - Прави избраната колона за изглед на списък редактируема при натискане на бутон

Имам listView с презентация на gridview и TextBlocks във всяка колона. Бих искал да направя избрания ред редактируем, като заменя текстовите блокове с TextBoxes и ComboBoxes, когато потребителят щракне върху бутон за редактиране. Опитах се да направя това, като зададох стилове, които превключват видимостта на контролите по следния начин:

<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 са свойства за видимост, зададени в задния код. И по-надолу в 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>

Проблемът ми е, че промяната на „editMode“ и „displayMode“ в задния код изглежда не се открива на ниво потребителски интерфейс.

Освен това, дори и да накарам това да работи, нямам представа как да го приложа само към избрания ред. Мога да направя това отделно, като обвържа стойността за видимост с ListView, така че когато потребителят избере ред, тя/той получава редактируемите контроли на този ред, но наистина искам да разреша това само когато кликне върху бутон.


wpf
person Sandy    schedule 29.04.2010    source източник


Отговори (1)


Обновихте ли съдържанието на мрежата след извършване на промени? Можете да използвате метода Grid.GetColumn и да изпратите обекта на изпращача, т.е. бутона за редактиране (който предполагам, че ще бъде отделен за всяка колона) и след това вероятно да използвате VisualTreeHelper, за да получите текстовото поле и комбинираното поле в тази колона.

Освен това защо не използвате свойството „IsReadOnly“ на TextBox вместо да замените TextBlock? Направете го вярно или невярно според вашите изисквания.

person Archie    schedule 29.04.2010
comment
Здравейте, опресняването на съдържанието изглежда не работи. Не използвам свойството ReadOnly, защото първо трябва да заменя някои TextBlocks с ComboBoxes, така че реших, че прилагането на стил за всички редактируеми контроли и друг за всички ReadOnly контроли би било по-добре. И второ, всички контроли са в DataTemplates, така че все още трябва да задам стиловете като ресурси, което ме връща към първия ми проблем, който е задаване на стилово свойство в сетер от моя код зад - person Sandy; 29.04.2010
comment
Сменяте ли режимите и на двете? като задаване на нечия видимост на видима и на друга на свита? - person Archie; 29.04.2010
comment
да Точно това се опитвам да направя. По принцип съм нов в .Net, така че имам малко затруднения при опитите да преведа някои C# кодове с VisualTreeHelper - person Sandy; 29.04.2010