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}"
相关推荐
加号316 小时前
【WPF】自定义颜色拾取器
wpf·自定义颜色拾取器
张人玉16 小时前
WPF 常用样式属性及示例笔记
笔记·wpf
张人玉17 小时前
WPF布局控件(界面骨架核心)
开发语言·c#·wpf·布局控件
亦陈不染20 小时前
c#入门详解(刘铁锰)06 - 数据持久化:TXT文本保存、序列化与反序列化(附详细源码)
开发语言·计算机视觉·c#·wpf
应用市场1 天前
楼灯光矩阵显示系统:从理论到实践的完整技术方案
线性代数·矩阵·wpf
虚行1 天前
WPF入门
开发语言·c#·wpf
周杰伦fans1 天前
MahApps.Metro WPF 开发使用过程中遇到的问题 - 未能加载文件或程序集“Microsoft.Xaml.Behaviors,
microsoft·wpf
△曉風殘月〆2 天前
WPF中的坐标转换
wpf
一个天蝎座 白勺 程序猿2 天前
深度解析:通过ADO.NET驱动Kdbndp高效连接与操作Kingbase数据库
数据库·.net·wpf·kingbase·金仓数据库