WPF MVVM指示灯在选择时向listview项添加图像

WPF MVVM指示灯在选择时向listview项添加图像,wpf,listview,wpf-controls,mvvm-light,Wpf,Listview,Wpf Controls,Mvvm Light,我有一个列表视图,当我选择一个项目时,我希望能够添加一个“删除”按钮,并附加一个命令。我在堆栈中找不到任何与此相关的内容,这非常令人惊讶。一种方法是将样式应用于ListView.Resources中的ListViewItem。在样式中,仅使用文本块将内容模板设置为数据模板。然后给样式一个触发器,该触发器绑定到IsSelected属性。在触发器中,您将使用文本块和按钮将内容模板设置为新的数据模板。使用相对资源绑定,将按钮的命令属性绑定到ViewModel,并将命令参数绑定到项,以便将其作为参数传递

我有一个列表视图,当我选择一个项目时,我希望能够添加一个“删除”按钮,并附加一个命令。我在堆栈中找不到任何与此相关的内容,这非常令人惊讶。

一种方法是将样式应用于
ListView.Resources
中的
ListViewItem
。在
样式
中,仅使用
文本块将
内容模板
设置为
数据模板
。然后给
样式
一个
触发器
,该触发器绑定到
IsSelected
属性。在
触发器
中,您将使用
文本块和
按钮
内容模板
设置为新的
数据模板
。使用
相对资源
绑定,将
按钮的
命令
属性绑定到ViewModel,并将
命令参数
绑定到项,以便将其作为参数传递给DeleteCommand

XAML

<ListView Margin="3"
          MinWidth="200"
          ItemsSource="{Binding Items}">
    <ListView.Resources>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock Text="{Binding SomeProperty}"
                                   Margin="3" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsSelected"
                         Value="True">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding SomeProperty}"
                                               Margin="3" />
                                    <Button Content="Delete"
                                            Margin="3"
                                            Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"
                                            CommandParameter="{Binding }" />
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.Resources>
</ListView>

视图模型

private ICommand _DeleteCommand;
public ICommand DeleteCommand
{
    get
    {
        if (_DeleteCommand == null)
        {
            _DeleteCommand = new RelayCommand<ExampleModel>(param => DeleteItem(param));
        }

        return _DeleteCommand;
    }
}

private void DeleteItem(ExampleModel item)
{
    MessageBox.Show(item.SomeProperty);
}
private ICommand _delete命令;
公共ICommand delete命令
{
得到
{
如果(_DeleteCommand==null)
{
_DeleteCommand=newrelayCommand(param=>DeleteItem(param));
}
返回_delete命令;
}
}
私有void DeleteItem(示例模型项)
{
MessageBox.Show(item.SomeProperty);
}

为了演示,我只使用Delete方法在MessageBox中显示值。您应该能够修改数据模板和删除方法以满足您的需要。

Boss。非常感谢!