开发者

LinkButton doesn't work Silverlight

开发者 https://www.devze.com 2023-03-31 06:57 出处:网络
I have a method that I call to create a link button. However the problem is that it passing the field name that the actual field to link button becasically giving me a dead link.

I have a method that I call to create a link button. However the problem is that it passing the field name that the actual field to link button becasically giving me a dead link.

This is the method:

     private static DataGridTemplateColumn CreateHyperlink(string fieldName)
    {
        DataGridTemplateColumn column = new DataGridTemplateColumn();

        column.Header = "";

        string link = @"http://www.amazon.com/gp/product/" + fieldName;

        StringBuilder sb = new StringBuilder();
        sb.Append("<DataTemplate ");
        sb.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
        sb.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
        sb.Append("xmlns:src='clr-namespace:Silverlight1.Classes;assembly=Silverlight1.Classes'>");
        sb.Append("<HyperlinkButton ");
        sb.Append("TargetName= '_blank' ");
        sb.Append("Content = 'Link' ");
        sb.Append("NavigateUri =" +"'"+ link +"'");
        sb.Append(" />");
        sb.Append("</DataTemplate>");

        column.CellTemplate = (DataTemplate)XamlReader.Load(sb.ToString());
        column.IsReadOnly = false;
        return column;
    }

Which is called by this

dgOrder.Columns.Add(CreateHyperlink("asin"));

开发者_C百科Which is getting pulled from a WCF Silverlight enable data service. How do I pass the content instead of field name?


You don't pass the content, you pass the field name but create a Binding. You will also need an implementation of a IValueConverter.

Lets start with an IValueConverter, you need something which take the string value of the "field" (by which I'm assuming you mean a Property of the objects bound to rows in the grid) and prefix it with @"http://www.amazon.com/gp/product/" to form a complete URL.

public class UrlPrefixConverter : IValueConverter
{
     public string Prefix {get; set;}
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        { 
            return new Uri(Prefix + value.ToString(), UriKind.Absolute);
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Place an instance of this in the App.xaml:-

 <Application.Resources>
      <local:UrlPrefixConverter Prefix="http://www.amazon.com/gp/product/" x:Key="AmazonPrefixConverter" />
 </Application.Resources>

Now your create method can look like this:-

    private static DataGridTemplateColumn CreateHyperlink(string fieldName)
    {
        DataGridTemplateColumn column = new DataGridTemplateColumn();

        column.Header = "";

        string template = @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" >
                <HyperlinkButton TargetName=""_blank"" Content=""Link""
                     NavigateUri=""{{Binding {0}, Converter={{StaticResource AmazonPrefixConverter}}}}"" />
             </DataTemplate>"; 

        column.CellTemplate = (DataTemplate)XamlReader.Load(String.Format(template, fieldName));
        column.IsReadOnly = false;
        return column;
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号