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