动态添加DataTemplate且为模板中的button控件添加Click Event
动态生成DataTemplate
private DataTemplate GetDataTemplateForBindingLink()
{
StringBuilder cellTemplate = new StringBuilder();
cellTemplate.Append("<DataTemplate ");
cellTemplate.Append("xmlns='http://schemas.microsoft.com/client/2007' ");
cellTemplate.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
cellTemplate.Append("xmlns:local = 'Your namespace");
cellTemplate.Append(";assembly=Your assembly name'>");
cellTemplate.Append("<Grid>");
cellTemplate.Append("<HyperlinkButton ");
cellTemplate.Append("HorizontalContentAlignment='Center' Foreground='Blue' ");
cellTemplate.Append("Content = '{Binding Path=RowData.Row.ScriptName}' Command='{Binding Path=LinkClick,ElementName=LogGrid}' CommandParameter='{Binding}' />");
cellTemplate.Append("</Grid>");
cellTemplate.Append("</DataTemplate>");
DataTemplate dataTemplate =(DataTemplate)XamlReader.Load(cellTemplate.ToString());
return dataTemplate;
}
由于在动态生成的DataTemplate是直接添加Click事件将发生错误,所以就想到利用Command binding,结果是成功的,下面要做的工作如下:
实现ICommand接口类:
public class FMUICommand:ICommand
{
private RoutedEventHandler click;
public FMUICommand(RoutedEventHandler click)
{
this.click = click;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
this.click(parameter, null);
}
}
页面中CS代码添加一个属性和一个方法
public FMUICommand LinkClick { get; set; }
private void LinkButton_Click(object sender, RoutedEventArgs e)
{
}
在页面class构造函数中初始化LinkClick 属性:
this.LinkClick = new FMUICommand(this.LinkButton_Click);
其中页面的名字是:
x:Name="LogGrid"