在列表视图 WPF 上编辑文本视图列

本文关键字:视图 文本 编辑 WPF 列表 | 更新日期: 2023-09-27 18:34:10

我正在使用WPF。
我有带有文本框列和两个复选框列的列表视图。
我想通过双击或其他方式编辑文本框文本。
有什么简单的方法可以做到这一点?

...
<GridViewColumn Header="Name" DisplayMemberBinding={Binding Path=fullName}" Width=500>
        <GridViewColumn.CellTemplate>
               <DataTemplate>
                      <TextBox Name="txtName"/>
               </DataTemplate>
         </GridViewColumn.CellTemplate>
</GridViewColumn>
...

在列表视图 WPF 上编辑文本视图列

这是执行此操作的示例方法...

public partial class MainWindow : Window
{
    public List<string> Items { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        Items = new List<string>();
        LoadItems();
        DataContext = this;
    }
    private void txtName_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        TextBox currentTextBox = (TextBox)sender;
        if (currentTextBox.IsReadOnly)
            currentTextBox.IsReadOnly = false;
        else
            currentTextBox.IsReadOnly = true;
    }
    private void LoadItems()
    {
        Items.Add("Coffee");
        Items.Add("Sugar");
        Items.Add("Cream");
    }
}
<Grid>
    <ListView ItemsSource="{Binding Items}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Name="txtName" Text="{Binding Mode=OneTime}" IsReadOnly="True" MouseDoubleClick="txtName_MouseDoubleClick" Width="100"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>                    
            </GridView>                
        </ListView.View>
    </ListView>
</Grid>

这是我编写的应用程序的一个例子。"作业名称"列是用户可编辑的。 本示例允许列可编辑,并删除边框,让背景混合到行中,使其看起来没有文本框。
这些可以编辑掉 (BorderThickness="0" Background="Transparent") .

我的示例绑定到名为 JobName 的 MVVM 视图模型属性,并设置为"双向",以便对视图模型的更改也将反映在 UI 上。

 <ListView x:Name="lvJobs" HorizontalAlignment="Left" Height="628" Margin="30,62,0,0" ItemsSource="{Binding Jobs}" 
                  SelectedItem="{Binding SelectedJob, Mode=TwoWay}" VerticalAlignment="Top" Width="335">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Active" Width="50">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsActive, Mode=TwoWay}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Job Name" Width="150">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding JobName, Mode=TwoWay}" BorderThickness="0" Background="Transparent"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding User}" Header="User" Width="125"/>
        </GridView>
    </ListView.View>
</ListView>