0

Silverlight で初めて作業し、AutoCompleteBox を (Web サービス経由で) イメージ サムとイメージ タイトルにバインドしたい。イメージ タイトルを検索し、イメージ タイトルをバインドすることができる

作業工程

  1. ウェブサービス

    [WebMethod]
    public List<imagedata> Searchimage(string s)
    {
        var db = new PetaPoco.Database("sales");
        var list = from search in db.Query<imagedata>("select * from   imagedata").ToList() where search.imgname.Contains(s) select search;
    
        return list.ToList<imagedata>() ;
    }
    
  2. xaml

        <sdk:AutoCompleteBox x:Name="searchText"
                  Populating="searchText_Populating" />
                </StackPanel>
    
  3. .cs

     private void searchText_Populating(object sender, PopulatingEventArgs e)
    {
        mySoapClient proxy = new mySoapClient();
    
        proxy.SearchimageCompleted +=
                             new EventHandler<SearchimageCompletedEventArgs>(proxy_ImageGetCompleted);
        proxy.SearchimageAsync(searchText.Text);
    }
    void proxy_ImageGetCompleted(object sender, SearchimageCompletedEventArgs e)
    {
    
        var  searchResults = new List<imagedata>(e.Result);
        var data = new List<string>();
    
        foreach (var x in searchResults)
        {
            data.Add(x.imgname);
        }
        searchText.ItemsSource = data;
    
        searchText.PopulateComplete(); 
    
    }
    

画像のサムネイルと画像のタイトルの両方の画像 URL をバインドしたい場合は、次のプロセスを適用します

<sdk:AutoCompleteBox x:Name="searchText"  Populating="searchText_Populating">
                <sdk:AutoCompleteBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                 <Image x:Name="image1" Height="100" Width="100" Canvas.Left="0" Canvas.Top="0"></Image>
                    <TextBlock  VerticalAlignment="Center" Margin="10 0 0 0" />
                        </StackPanel>
                    </DataTemplate>
                </sdk:AutoCompleteBox.ItemTemplate>

コレクションをオートコンプリートボックスのデータテンプレートにバインドするにはどうすればよいですか?これに辞書を使用できますか? はいの場合、それをデータ テンプレートにバインドする方法

4

1 に答える 1

0

ItemsControlのドキュメントには、開始するために必要なほとんどすべてが記載されています。

あなたの場合、最終的にバインディング構文を使用して、ItemTemplate で Image の ImageSource を設定します。これを機能させるには、値コンバーターを使用して、文字列をイメージで使用できるものに変換する必要があります。

<sdk:AutoCompleteBox x:Name="searchText"  Populating="searchText_Populating">
     <sdk:AutoCompleteBox.Resources>
         <local:ImageSourceConverter x:Key="ImageSourceConverter" />
     </sdk:AutoCompleteBox.Resources>
...
<Image x:Name="image1" 
       Height="100" 
       Width="100" 
       Canvas.Left="0" 
       Canvas.Top="0"
       ImageSource="{Binding Converter={StaticResource ImageSourceConverter}}">
</Image>
...

そしてコンバーター:

public class ImageSourceConverter : System.Windows.Data.IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string source = value as string;
        if (source != null)
        {
            return new System.Windows.Media.Imaging.BitmapImage 
            { 
                UriSource = new Uri(source, UriKind.Absolute) 
            };
        }

        return source;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2013-03-24T09:18:09.920 に答える