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

转帖|其它|编辑:郝浩|2012-02-02 21:40:21.000|阅读 1137 次

概述:这篇文章分享MVVM中常见的一个问题,相信在实际运用MVVM的朋友一定会遇到这种问题.

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  这篇文章分享MVVM中常见的一个问题,相信在实际运用MVVM的朋友一定会遇到这种问题. 

<sdk:DataGridTemplateColumn Header="功能" Width="Auto">

<sdk:DataGridTemplateColumn.CellTemplate>

<DataTemplate >

<StackPanel Orientation="Horizontal">

<Button Content="删除" Margin="10,0" Command="{Binding ShowCommand}" Height="24"

HorizontalAlignment="Left" VerticalAlignment="Center" >

</Button>

</StackPanel>

</DataTemplate>

</sdk:DataGridTemplateColumn.CellTemplate>

  </sdk:DataGridTemplateColumn>

  在CellTemplate中的Button与ViewModel中的Command属性绑定时.你会发现Button无法触发这个事件      

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

public class DataContextProxy:TriggerAction<DependencyObject>

{

protected override void Invoke(object parameter)

{

var parent = this.AssociatedObject as DependencyObject;

var fe = this.AssociatedObject as FrameworkElement;

while (parent != null)

{

if (parent.GetType() == typeof(DataGrid))

{

var context = parent as DataGrid;

fe.DataContext = context.DataContext;

break;

}

parent = VisualTreeHelper.GetParent(parent) as DependencyObject;

}

 

}

  }

  继承一个TriggerAction,具体的原理就不叙述了,Button引用这个TriggerAction ,不要忘了System.Windows.Interactivity这个dll噢^^

<Button Content="删除" Margin="10,0" Command="{Binding ShowCommand}" Height="24"

HorizontalAlignment="Left" VerticalAlignment="Center" >

<i:Interaction.Triggers>

<i:EventTrigger>

<local:DataContextProxy/>

</i:EventTrigger>

</i:Interaction.Triggers>

</Button>


标签:MVVM

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP