将DataTemplate中的按钮绑定到表单的ViewModel中的命令。

14 浏览
0 Comments

将DataTemplate中的按钮绑定到表单的ViewModel中的命令。

我的问题类似于这个问题的描述:WPF MVVM中的按钮控件绑定在DataTemplate中

这是我的XAML代码:


    
        
        
        
            
                
                    
                    

它只是一个绑定到ViewModel中名为CommandSets的ObservableCollection的ListBox。

这个绑定是生效的(它为集合中的每个项目显示一个按钮)。

现在我想要将按钮绑定到一个在ViewModel中的命令(FireCommand)。

这是ViewModel的相关部分:

public class MainWindowViewModel : INotifyPropertyChanged
{
    public ICommand FireCommand { get; set; }
    public ObservableCollection CommandSets { get; set; }
    public MainWindowViewModel()
    {
        this.FireCommand = new RelayCommand(new Action(this.FireMissile));
    }
    private void FireMissile(Object obj)
    {
        System.Windows.MessageBox.Show("fire");
    }
}

这个按钮的绑定不起作用。

从我了解到的上面链接的问题中,绑定不起作用的原因是:

(如果我理解错了,请纠正我)

  • 按钮位于ListBox内部,所以它只“知道”ListBox的绑定(在这种情况下就是ObservableCollection),而不知道主窗口的绑定
  • 我试图绑定到主窗口的主ViewModel中的一个命令(按钮不“知道”)

命令本身肯定是正确的,因为当我把按钮放在ListBox之外时(参见上面的XAML示例),绑定生效并且命令被执行。

显然,我“只需要”告诉按钮绑定到表单的主ViewModel。

但是我无法找到正确的XAML语法。

我尝试了一些在Google上找到的方法,但是它们都对我无效:

请问有人可以:

  1. 给我提供将按钮绑定到列表框内部的命令的正确XAML代码吗?命令在表单的MainViewModel中。
  2. 指向一个以WPF/MVVM初学者可以理解的方式来解释这些高级绑定的链接吗?

    我感觉我只是在复制和粘贴奇怪的XAML咒语,到目前为止我没有任何线索(也找不到任何好的文档)如何找出在哪种情况下我需要使用RelativeSource或StaticResource或其他替代“正常”绑定。

0