C# 如何向ItemsControl中的WPF按钮添加相同的命令

C# 如何向ItemsControl中的WPF按钮添加相同的命令,c#,wpf,xaml,datatemplate,itemscontrol,C#,Wpf,Xaml,Datatemplate,Itemscontrol,如何向属于ItemsControl的wpf按钮添加命令,并修改ItemsSource本身 这是我的XAML: <ItemsControl ItemsSource="{Binding PluginVMs}"> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel> <Button x:Name="btnStam

如何向属于
ItemsControl
的wpf按钮添加命令,并修改
ItemsSource
本身

这是我的XAML:

<ItemsControl ItemsSource="{Binding PluginVMs}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Button x:Name="btnStampDuplicate" 
                        Content="Duplicate this control"
                        Command="{Binding ?????????}"/>
                <!-- other stuff -->
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这是我的viewmodel:

public ObservableCollection<PluginViewModel> PluginVMs
{
    get { return _pluginVMs; }
    set
    {
        if (_pluginVMs != value)
        {
            _pluginVMs = value;
            NotifyPropertyChanged("PluginVMs");
        }
    }
}
public observeCollection PluginVMs
{
获取{return\u pluginVMs;}
设置
{
如果(_pluginVMs!=值)
{
_pluginVMs=值;
NotifyPropertyChanged(“PluginVMs”);
}
}
}
如您所见,
PluginVMs
PluginViewModel
的集合。因此,我知道可以从
btnStampDuplicate
获得的命令应该在
PluginViewModel
中实现


但是,正如名称duplicate所暗示的,我想在
PluginVMs
内部复制当前生成的
PluginViewModel
。为
btnStampDuplicate
提供此类功能的最佳方法是什么?

不必在每个项目中都使用命令。可以使用CommandParameter传递作为重复源的项

使用ElementName在DataTemplate内部绑定命令以访问更高级别的DataContext

看法


视图模型

public class Vm
{
    public ObservableCollection<PluginViewModel> PluginVMs
    {
        get { return _pluginVMs; }
        set
        {
            if (_pluginVMs != value)
            {
                _pluginVMs = value;
                NotifyPropertyChanged("PluginVMs");
            }
        }
    }

    public ICommand DupeCmd { get; private set; }
}
公共类虚拟机
{
公共可观测收集插件
{
获取{return\u pluginVMs;}
设置
{
如果(_pluginVMs!=值)
{
_pluginVMs=值;
NotifyPropertyChanged(“PluginVMs”);
}
}
}
公共ICommand DupeCmd{get;private set;}
}

Wow ElementName太棒了!我要玩玩它@公众119,同意:)看看另一个技巧-相对资源-这也是非常棒的!
public class Vm
{
    public ObservableCollection<PluginViewModel> PluginVMs
    {
        get { return _pluginVMs; }
        set
        {
            if (_pluginVMs != value)
            {
                _pluginVMs = value;
                NotifyPropertyChanged("PluginVMs");
            }
        }
    }

    public ICommand DupeCmd { get; private set; }
}