上天试道者 2024-04-29 17:02 采纳率: 33.3%
浏览 16

Avalonia UI MVVM无法绑定表格里按钮Command

Avalonia UI MVVM无法绑定表格里按钮Command,报错绑定不了

img

img

 <!-- 表格里的按钮 -->
  <!-- 添加一列包含按钮的模板列 -->
  <DataGrid.Columns>
    <DataGridTemplateColumn Header="绑定" Width="200">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <Button Content="Action"
                        Command="{Binding DataContext.ClickRowCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                        CommandParameter="{Binding ConfigID}"/>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>


 public MyViewModel()
    {
        // 命令定义
        ClickRowCommand = ReactiveCommand.Create<int>(HandleClickRow);
    }

  public ReactiveCommand<int, Unit> ClickRowCommand { get; }

  private void HandleClickRow(int configID)
  {
      // 这里可以根据id获取对应行数据并处理
      var selectedItem = AllocationModels.FirstOrDefault(item => item.ConfigID == configID);
      if (selectedItem != null)
      {
         
      }
  }
  • 写回答

5条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-29 17:02
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 在使用Avalonia UI的MVVM模式下,表格中的按钮无法绑定Command属性,并报错“绑定不了”。 解答: 在Avalonia UI中,要注意传递DataContext的作用域问题,在代码中设置相应的AncestorType指明DataContext的传递路径。同时,要注意Command的绑定方式,需要使用ReactiveCommand.Create方法定义命令并与按钮的Command属性绑定。 以下是修改后的代码示例:
    <DataGrid Items="{Binding AllocationModels}">
       <DataGrid.Columns>
          <DataGridTemplateColumn Header="绑定" Width="200">
             <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                   <Button Content="Action" 
                           Command="{Binding DataContext.ClickRowCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
                           CommandParameter="{Binding ConfigID}" />
                </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
          </DataGridTemplateColumn>
       </DataGrid.Columns>
    </DataGrid>
    
    public class MyViewModel
    {
        public MyViewModel()
        {
            // 命令定义
            ClickRowCommand = ReactiveCommand.Create<int>(HandleClickRow);
        }
        public ReactiveCommand<int, Unit> ClickRowCommand { get; }
        private void HandleClickRow(int configID)
        {
            // 这里可以根据id获取对应行数据并处理
            var selectedItem = AllocationModels.FirstOrDefault(item => item.ConfigID == configID);
            if (selectedItem != null)
            {
                //处理代码...
            }
        }
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 4月29日

悬赏问题

  • ¥15 请教下, VS QT 环境下, QTOPCUA 的源文件报错,这种情况咋查呢 ?
  • ¥20 UNITY webgl关于文档的上传和下载问题
  • ¥15 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式