WPF MVVM下 ItemsControl条目命令绑定传参

xaml:

XML 复制代码
  <ItemsControl x:Name="itemsControl" ItemsSource="{Binding TreeViewModelForFlowList}">
      <!--  定义ItemsPanel,设置项之间的间距  -->
      <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
              <StackPanel Margin="10" Orientation="Vertical" />
          </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>

      <!--  定义项模板  -->
      <ItemsControl.ItemTemplate>
          <DataTemplate>
              <!--  每个项的外边框  -->
              <Border
                  Margin="0,2"
                  Padding="8"
                  BorderThickness="1"
                  CornerRadius="4">
                  <Grid>
                      <Grid.ColumnDefinitions>
                          <ColumnDefinition Width="*" />
                          <!--  第一个按钮占剩余空间  -->
                          <ColumnDefinition Width="Auto" />
                          <!--  第二个按钮自适应内容  -->
                          <ColumnDefinition Width="5" />
                          <!--  间距  -->
                          <ColumnDefinition Width="Auto" />
                          <!--  第三个按钮自适应内容  -->
                      </Grid.ColumnDefinitions>

                      <!--  第一个大按钮  -->
                      <telerik:RadButton
                          Grid.Column="0"
                          Height="40"
                          Margin="0,0,5,0"
                          Command="{Binding DataContext.FlowControlCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
                          CommandParameter="{Binding}"
                          Content="{Binding FlowDescription}"
                          FontSize="14"
                          FontWeight="SemiBold"
                          Foreground="White" />

                      <!--  第二个小按钮  -->
                      <Button
                          Grid.Column="1"
                          Width="60"
                          Height="30"
                          Background="#6C757D"
                          Content="{Binding TreeViewActionModel}"
                          FontSize="12"
                          Foreground="White" />
                  </Grid>
              </Border>
          </DataTemplate>
      </ItemsControl.ItemTemplate>
  </ItemsControl>

界面:

命令方法:

cs 复制代码
  private ObservableCollection<TreeViewModelForFlow> _treeViewModelForFlowList;

 /// <summary>
 /// 按钮界面配置列表
 /// </summary>
 public ObservableCollection<TreeViewModelForFlow> TreeViewModelForFlowList
 {
     get => _treeViewModelForFlowList;
     set { this.RaiseAndSetIfChanged(ref _treeViewModelForFlowList, value); }
 }

public void FlowControl(TreeViewModelForFlow flow)
{
    
}

要点,直接绑定命令会找不到,直接写命令绑定是在ItemsControl的每个项中绑定的,就像按钮的Content绑定一样,绑定的是每个项的属性,但想要的效果实际上是在主ViewModel中,需要使用 RelativeSource 找到父级DataContext,即为主ViewModel。

或者使用 ElementName 绑定

XML 复制代码
Command="{Binding ElementName=itemsControl, Path=DataContext.FlowControlCommand}"
相关推荐
yanaiding1 天前
C# WPF 独立开发看图工具 PixSight 经验介绍(二)—— 水印模块开发实录
图像处理·c#·wpf·个人开发
我是苏苏4 天前
WPF开发01:基础控件及常用模板篇
开发语言·c#·html·wpf
dalong104 天前
WPF:3D顶点共享与法线设置对光照效果的影响
3d·wpf
柔蘭5 天前
WPF中的CommunityToolkit.Mvvm框架
wpf
aGdF8E3gQ6 天前
【Application Insights】采样率对Function App日志收集的影响和解决方法
python·flask·wpf
程序员-Benothing6 天前
如何实现高并发系统订单30分钟自动关闭?
开发语言·c#·wpf
一水7 天前
Redis实战:一个AI工作流系统里的五个应用场景,从传参到限流的完整链路
数据库·redis·wpf
dalong107 天前
WPF:3D甜甜圈
3d·c#·wpf·甜甜圈
别催小唐敲代码7 天前
ROS2从入门到实战:去中心化机器人操作系统详解
wpf·ros2
脚踏实地皮皮晨8 天前
003006001_WrapPanel控件
开发语言·c#·.net·wpf·visual studio