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//(转为实体类)

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

}

}

 

posted on 2013-08-23 18:20  Kingly  阅读(644)  评论(0编辑  收藏  举报