Silverlight中使用MVVM:DataGrid中触发Button的Click事件
2013-08-23 18:20
232 查看
方法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//(转为实体类)
其他操作......
});
}
}
<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//(转为实体类)
其他操作......
});
}
}
相关文章推荐
- Silverlight中使用MVVM(7):DataGrid中触发Button的Click事件
- Silverlight中使用MVVM(7):DataGrid中触发Button的Click事件
- Silverlight中使用MVVM方式进行datagrid的内嵌combobox方法
- Silverlight 后台利用代码触发 Button 的Click事件
- Silverlight中使用DataGrid后,里面的Button的Command不响应的问题
- Silverlight中使用SDK的DataGrid,出现滚动条,每次滚动会触发LoadingRow事件
- 【Silverlight】以MVVM友好的方式使用DataGrid的SelectedItems属性
- Silverlight中使用MVVM
- Silverlight中Datagrid添加Button列用于控制单行对象
- Silverlight教程第三部分:使用 Networking取回数据并填充DataGrid
- Silverlight教程第三部分:使用 Networking取回数据并填充DataGrid
- [Silverlight入门系列]使用MVVM模式(4):Prism的NotificationObject自动实现INotifyPropertyChanged接口
- Silverlight中使用MVVM(3)—进阶
- silverlight使用DataGrid实现类似Treelistview效果
- Silverlight中DataGrid翻页或者滚动时CheckBox/RadioButton显示的问题
- MVVM-Light模式,在dataGrid的模板下,绑定事件不触发的原因已经服务端排序的实现
- DataGrid全选功能(使用MVVM架构)
- Silverlight DataGrid使用WCF Service实现Load-on-demand的数据加载
- 关于使用Silverlight Toolkit 3 中的主题后DataGrid无法呈现数据的问题
- [Silverlight入门系列]使用MVVM模式(1):MVVM核心概念