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。非常感谢!