您的位置:首页 > 其它

Silverlight DataGridTemplateColumn 中绑定事件

2012-11-16 11:19 603 查看
前段时间一直很忙,老板催得紧:(

从今天开始,陆续记录一些。

在Silverlight中,想实现DataGird中最后一列是自定义的操作按钮,并按照MVVM模式绑定DataGrid的数据源、按钮事件。

首先,初步想到的是这样子。

<sdk:DataGrid ItemsSource="{Binding AdjustCurves}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" AutoGenerateColumns="False" MinHeight="50" x:Name="dataGrid1"  Visibility="{Binding IsShowList, Converter={StaticResource BooleanToVisibilityConverter1}}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="名称" Binding="{Binding CurveName}" IsReadOnly="True" MinWidth="120"/>
<sdk:DataGridTemplateColumn Header="操作"  >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<HyperlinkButton  Content="编辑" Command="{Binding EditCommand}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>


绑定代码:

private RelayCommand _editCommand;
/// <summary>
/// 编辑当前
/// </summary>
public RelayCommand EditCommand
{
get
{
if (_editCommand == null)
{
_editCommand = new RelayCommand( () => MessageBox.Show("Edit"));
}

return _editCommand;
}
}


当然,按钮事件绑定是无效的,在VS的输出窗口中,可以看到错误信息(程序不会弹出错误,所以养成看输出窗口很重要啊),提示在绑定的数据源实体类找不到“EditCommand”属性。

试了很多方法后,最后在Google中找到了解决方案:Command binding inside a DataGridTemplateColumn

改为:

<HyperlinkButton  Content="编辑" Command="{Binding Path=DataContext.EditCommand,RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" />


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