WPF 教你如何在MVVM中,ControlTemplate里面的按钮Button绑定Conmmand,ListBox为例

 需求:我们在写控件样式的时候有时候需要在样式中添加一个按钮,例如ListBox在ListBoxItem中的ControlTemplate里面添加一个按钮,按钮的Conmmand想要和ViewModel里的方法Binding。


实现:

  <Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="Template"  >
       <Setter.Value>
           <ControlTemplate TargetType="{x:Type ListBoxItem}">
               <Button Name="TestButton" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DataContext.TestCommand}" CommandParameter="{Binding ElementName=TestButton}"/>
           </ControlTemplate>
       </Setter.Value>
      </Setter>
    </Style>

总结:其中里面的 TestCommand 就是ViewModel中你想要绑定的Command,CommandParameter决定是否需要传参数。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF MVVM,你可以使用命令模式来将一个按钮的点击事件绑定到ViewModel的一个方法。以下是在DataGrid使用按钮绑定命令方法的步骤: 1. 在ViewModel创建一个ICommand属性,该属性将绑定按钮的Command属性。可以使用RelayCommand等现有的ICommand实现,也可以自己实现ICommand接口。如下所示: ```csharp public class MyViewModel { public ICommand MyCommand { get; set; } public MyViewModel() { MyCommand = new RelayCommand(ExecuteMyCommand); } private void ExecuteMyCommand(object parameter) { // 在这里编写命令方法的代码 } } ``` 2. 在XAML,在DataGrid创建一个Button列,并将Button的Command属性绑定到ViewModel的命令属性。如下所示: ```xaml <DataGrid ...> <DataGrid.Columns> ... <DataGridTemplateColumn Header="Action"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Do Something" Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{Binding}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> ``` 注意,这里使用了RelativeSource来绑定到Window的DataContext,因为DataGrid的DataContext通常是绑定到ViewModel的。 3. 运行应用程序并单击按钮时,将调用ViewModel的ExecuteMyCommand方法。 请注意,如果你要在DataGrid使用按钮,可能需要使用DataGridTemplateColumn来创建一个自定义列。在该列,使用DataTemplate来定义Button的外观和行为,并将Button的Command属性绑定到ViewModel的命令属性。还可以将Button的CommandParameter属性绑定到DataGrid的当前行,以便在命令方法访问该行的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值