WPF委托命令DelegateCommand的传参方式
首先引用 Microsoft.Practices.Prism
MVVM模式代码如下:
XAML代码:
<!-- 无参方式 --> <Button Content="Test Command" Command="{Binding TestCommand}" /> <!-- 将自己作为参数 --> <Button Content="Test Command2" Command="{Binding TestCommand2}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" > <!-- 将父元素作为参数 --> <Button Content="Test Command3" Command="{Binding TestCommand3}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}}" >
后台代码:
// code-behind构造函数中添加: this.DataContext = new ViewModel();
ViewModel代码:
// ViewModel 构造函数 public ViewModel() { CallCOmmand1 = new DelegateCOmmmand(Call1); CallCOmmand2 = new DelegateCOmmmand<Object>(Call2); CallCOmmand3 = new DelegateCOmmmand<Object>(Call3); } // 命令声明 public DelegateCommand CallCommand { get; private set; } public DelegateCommand<Object> CallCommand2 { get; private set; } public DelegateCommand<Object> CallCommand3 { get; private set; } // 命令实现 public void Call1() { } public void Call2( Object obj ) { Button button = obj as Button; } public void Call3( Object obj ) { ParentType parent = obj as ParentType; }
时间会记录下一切。