您的位置:首页 > 其它

Silverlight中使用MVVM(7):DataGrid中触发Button的Click事件

2012-04-06 11:20 483 查看
转自/article/5020518.html

<sdk:DataGridTemplateColumnHeader="功能"Width="Auto">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanelOrientation="Horizontal">
<ButtonContent="删除"Margin="10,0"Command="{BindingShowCommand}"Height="24"
HorizontalAlignment="Left"VerticalAlignment="Center">
</Button>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
[/code]在CellTemplate中的Button与ViewModel中的Command属性绑定时.你会发现Button无法触发这个事件

如何处理这种情况呢,我的做法是这样的:

[code]publicclassDataContextProxy:TriggerAction<DependencyObject>
{
protectedoverridevoidInvoke(objectparameter)
{
varparent=this.AssociatedObjectasDependencyObject;
varfe=this.AssociatedObjectasFrameworkElement;
while(parent!=null)
{
if(parent.GetType()==typeof(DataGrid))
{
varcontext=parentasDataGrid;
fe.DataContext=context.DataContext;
break;
}
parent=VisualTreeHelper.GetParent(parent)asDependencyObject;
}
}
}
[/code]继承一个TriggerAction,具体的原理就不叙述了,Button引用这个TriggerAction,不要忘了System.Windows.Interactivity这个dll噢^^

[code]<ButtonContent="删除"Margin="10,0"Command="{BindingShowCommand}"Height="24"
HorizontalAlignment="Left"VerticalAlignment="Center">
<i:Interaction.Triggers>
<i:EventTrigger>
<local:DataContextProxy/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
[/code]这样就可以了.另外一种方式可以参考:stackOverFlow.如何取舍就由各位自己分析比较吧.

示例下载:DataGridWithButton.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: