Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可编辑WPF列表视图_C#_Wpf_Listview_.net 3.5 - Fatal编程技术网

C# 可编辑WPF列表视图

C# 可编辑WPF列表视图,c#,wpf,listview,.net-3.5,C#,Wpf,Listview,.net 3.5,我想在用户双击某个项目时,使列表视图可编辑。我意识到web上有很多示例,但是,这些示例都基于IsSelected属性,而不是处理双击事件 有什么想法或建议吗 更新: 因此,我遇到的另一个问题是,如何访问所讨论的ListViewitem的数据模板中的控件?我迷路的地方是我需要访问控件的地方,并根据项目是否正在编辑来启用或禁用控件 当前,ListView数据模板如下所示: <DataTemplate> <Grid> <TextBlock Widt

我想在用户双击某个项目时,使列表视图可编辑。我意识到web上有很多示例,但是,这些示例都基于
IsSelected
属性,而不是处理双击事件

有什么想法或建议吗

更新:
因此,我遇到的另一个问题是,如何访问所讨论的
ListViewitem
的数据模板中的控件?我迷路的地方是我需要访问控件的地方,并根据项目是否正在编辑来启用或禁用控件

当前,
ListView
数据模板如下所示:

<DataTemplate>
    <Grid>
        <TextBlock Width="180" Text="{Binding Path=Description}"
              Style="{StaticResource GridBlockStyle}" />
         <TextBox Width="180" Text="{Binding Path=Description}" 
              Style="{StaticResource GridEditStyle}" />
    </Grid>
</DataTemplate>
<Window.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="GridBlockStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=IsSelected,
             RelativeSource={RelativeSource FindAncestor, 
             AncestorType={x:Type ListViewItem}}, 
             Converter={StaticResource boolToVis}, 
             ConverterParameter=False}" />
    </Style>
    <Style TargetType="{x:Type FrameworkElement}" x:Key="GridEditStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=IsSelected, 
            RelativeSource={RelativeSource FindAncestor,
            AncestorType={x:Type ListViewItem}},
            Converter={StaticResource boolToVis},
            ConverterParameter=True}" />
    </Style>
</Window.Resources>

被引用的样式如下所示:

<DataTemplate>
    <Grid>
        <TextBlock Width="180" Text="{Binding Path=Description}"
              Style="{StaticResource GridBlockStyle}" />
         <TextBox Width="180" Text="{Binding Path=Description}" 
              Style="{StaticResource GridEditStyle}" />
    </Grid>
</DataTemplate>
<Window.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="GridBlockStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=IsSelected,
             RelativeSource={RelativeSource FindAncestor, 
             AncestorType={x:Type ListViewItem}}, 
             Converter={StaticResource boolToVis}, 
             ConverterParameter=False}" />
    </Style>
    <Style TargetType="{x:Type FrameworkElement}" x:Key="GridEditStyle">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Visibility" Value="{Binding Path=IsSelected, 
            RelativeSource={RelativeSource FindAncestor,
            AncestorType={x:Type ListViewItem}},
            Converter={StaticResource boolToVis},
            ConverterParameter=True}" />
    </Style>
</Window.Resources>

booltVisibilityConverter
ListViewItem
IsSelected
属性的转换器,然后确定ListViewItem的
可见性

从当前的XAML标记中可以看到,编辑控件将在项目选择时激活(变得可见),而不是双击项目

更新2: 到目前为止,所有的建议只让我想到了解决问题的一半。对于如何访问我需要使其可见/不可见的实际控件,是否有可行的解决方案?我将把这个答案标记为解决方案

指针:

对于MVVM


如果您处于MVVM模式,您可能希望查看AttachedProperties和行为,而不是事件处理程序,以避免在代码隐藏中编写代码


+1关于附加行为的良好呼吁。一点学习曲线,特别是如果您不习惯定义自己的依赖属性,但是有一组LeftClick/RightClick/DoubleClick属性,您可以从任何元素绑定到任何ICommand,这非常好。这可能会帮助你避免一些陷阱。@djacobson是的,学习曲线是正确的,但一旦你得到它,那就太好了:)这是构建干净的WPF MVVM应用程序的必备条件