C# WPF向listview项添加更多交互

C# WPF向listview项添加更多交互,c#,.net,wpf,listview,C#,.net,Wpf,Listview,我正在使用Caliburn将listview绑定到viewmodel。我的视图代码如下所示: <ListView x:Name="ListView" Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding ProjectsPMod}" Margin="110,0,110,131" HorizontalContentAlignment="Stretch" BorderThickness="0" Height="111" Vertical

我正在使用Caliburn将listview绑定到viewmodel。我的视图代码如下所示:

<ListView  x:Name="ListView" Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding ProjectsPMod}" Margin="110,0,110,131" HorizontalContentAlignment="Stretch" BorderThickness="0" Height="111" VerticalAlignment="Bottom">
        <interactivity:Interaction.Triggers>
            <interactivity:EventTrigger EventName="SelectionChanged">
                <cal:ActionMessage MethodName="OpenProjectShell">
                    <cal:Parameter Value="{Binding ElementName=ListView, Path=SelectedItem}" />
                </cal:ActionMessage>
            </interactivity:EventTrigger>
        </interactivity:Interaction.Triggers>
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <StackPanel Orientation="Horizontal">
                        <ContentControl  Content="{StaticResource  Appbar_Suitcase}" />
                        <Label Content="{Binding Name}"/>
                    </StackPanel>

                    <Separator HorizontalAlignment="Stretch" Margin="0, 10, 0, 0"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

现在,每行中的每个项目都只显示其名称和公文包图标。如果我想在该行的下一行添加一个“编辑”,如果您单击该行时发生了什么事情(可能会出现一个弹出窗口),我该怎么做?

如果您的意思是“如何为每行添加一个编辑按钮?”那么您只需在ItemTemplate中添加一个按钮:

 <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <ContentControl  Content="{StaticResource  Appbar_Suitcase}" />
                    <Label Content="{Binding Name}"/>
                    <!-- Edit button -->
                    <Button Command="{Binding EditCommandOnViewModel}" Content="Edit" />
                </StackPanel>

                <Separator HorizontalAlignment="Stretch" Margin="0, 10, 0, 0"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>

您可以使用模板使普通的
按钮看起来像链接。只需将
按钮
添加到
堆栈面板
并将其绑定到命令:

<ListView  x:Name="ListView" Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding ProjectsPMod}" Margin="110,0,110,131" HorizontalContentAlignment="Stretch" BorderThickness="0" Height="111" VerticalAlignment="Bottom">
    <interactivity:Interaction.Triggers>
        <interactivity:EventTrigger EventName="SelectionChanged">
            <cal:ActionMessage MethodName="OpenProjectShell">
                <cal:Parameter Value="{Binding ElementName=ListView, Path=SelectedItem}" />
            </cal:ActionMessage>
        </interactivity:EventTrigger>
    </interactivity:Interaction.Triggers>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <ContentControl  Content="{StaticResource  Appbar_Suitcase}" />
                    <Label Content="{Binding Name}"/>
                </StackPanel>

                <Separator HorizontalAlignment="Stretch" Margin="0, 10, 0, 0"/>

                <Button Margin="0 10 0 0" Content="Link" Cursor="Hand" Command="{Binding YourCommand}">
                    <Button.Template>
                        <ControlTemplate TargetType="Button">
                            <TextBlock TextDecorations="Underline">
                                <ContentPresenter />
                            </TextBlock>
                        </ControlTemplate>
                    </Button.Template>
                    <Button.Style>
                        <Style TargetType="Button">
                            <Setter Property="Foreground" Value="Blue" />
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Foreground" Value="Red" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>
                </Button>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>


您可以使用
边距
属性控制
按钮在
堆栈面板中的位置。

如何操作?请缩小您的问题范围。您可以将
ItemTemplate
更改为您需要的复杂程度,比如网格、ItemsControls、TabControls(请不要使用tab控件)。您可以轻松地将按钮添加到模板中,只需将其
Command
属性绑定到视图模型上的
ICommand
,即可使其运行该行为。@mm8带有绑定到命令的按钮或映射到类似对象的超链接。@Iason:请参阅我的答案。这几乎就是我要查找的内容。我们怎样才能把那个按钮放在那一行的下面,这样就不会离名字那么近?让它看起来更像一个超链接而不是一个普通的按钮?@Iason:请记住向上投有用的答案: