• Silverlight中使用MVVM:DataGrid中触发Button的Click事件


    方法1、使用RelativeSource向上查找DataContext中的命令,但是需要注意的是命令绑定需要写全 类似: DataContext.ReLoadCommand
    <Button Grid.Column="1" Command="{Binding DataContext.ReLoadCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"Content="刷新" />

    红色字是关键。

    方法2、在Prism的官方文档中给了一个不错的解决办法,
    {Binding DataContext.XXXCommand, ElementName=DataGrid1},
    DataGrid1就是外面的DataGrid。

    如果外部父控件是DataGrid时,有时无法用上面的方法实现,可以采用下面的方法:

    <sdk:DataGridTemplateColumn Header="单号" Width="100">
    <sdk:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
    <HyperlinkButton x:Name="myHyperlinkButton" Content="{Binding XXXX, Mode=TwoWay}" Foreground="Blue" VerticalAlignment="Center"
    Command="{Binding DataContext.MyCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"
    CommandParameter="{Binding ElementName=myHyperlinkButton}"/>
    </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
    </sdk:DataGridTemplateColumn>

    ViewModel写法

    public ICommand MyCommand{

    get{

    return new RelayCommand<object>((param) =>
    {
    var ctrl = param as HyperlinkButton;
    ctrl.DataContext as Model//(转为实体类)

    其他操作......
    });

    }

    }

  • 相关阅读:
    优化tomcat——jvm
    深入理解jvm
    Too many open files
    Ubuntu 18.04 chrome安装
    Ubuntu 对比度调节
    SSH 开启,安装
    Ubuntu的Gnome美化
    snap占用/dev/loop0-/dev/loop11占用100%
    C题——Halting Problem(补题)
    H:有趣的试剂(1317)
  • 原文地址:https://www.cnblogs.com/Kingly/p/3278079.html
Copyright © 2020-2023  润新知