Soru & Cevap

Autocompletebox ı listbox a bağlamak ...

11.11.2013 - 01:47

Merhabalar. Windows Phone platformunda uygulama yazıyorum. Silverlight Toolkit for Windows Phone eklentisi kullanıyorum. Elimda bir autocompletebox ve listbox var. Amacım autocompletebox ta metin girildiğinde çıkan dropdown menüsündeki önerileri listbox a aktarmak. Kullanıcı her harf girdiğinde autocompletebox önerileri listbox itemleri olarak atanmalı ama bunu nasıl yapacağım?

2 Görüntülenme

6 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-472-1375079047.jpg
mehmet.altiparmak
14.11.2013 - 02:28

Ömer Merhaba Tekrar,

Eğer herhangi bir cevabın sorununa çözüm olduğunu düşünürsen doğru cevap olarak işaretlemen daha sonra aynı problemi araştıran arkadaşların doğru çözüme ulaşmasını kolaylaştıracaktır, işaretleyebilirsen sevinirim. 

Profile picture for user omer.birler
omer.birler
12.11.2013 - 12:54

Tamam sorunu çözdüm. Rebuild edince hata ortadan kalktı. Bütün uğraşlarınız için teşekkürler Mehmet Bey

Profile picture for user omer.birler
omer.birler
12.11.2013 - 12:37

Yine teşekkürler Mehmet Bey. Hata devam ediyor. Xaml sayfasındaki kullanıcı arayüzü görünmüyor ancak uygulama çalışıyor. Peki custom autocompletebox kullanmak bu silverlight toolkit in kaynak kodunda gerekli değişikliği yapıp yeniden compile edebilir miyiz?

picture-472-1375079047.jpg
mehmet.altiparmak
11.11.2013 - 11:59

Merhaba Ömer,

Aşağıdaki linkten çalışan örneği indirip inceleyebilirsin, yine sıkıntı yaşarsan çözmeye çalışalım problemi. 

https://dl.dropboxusercontent.com/u/218691470/CustomAutoCompleteBox.rar 

Mehmet

Profile picture for user omer.birler
omer.birler
11.11.2013 - 09:54
Merhabalar Mehmet Bey. Öncelikle detaylı açıklamanızdan dolayı çok teşekkür ediyorum. Dediğiniz gibi uygulamamın main appliction.xaml.cs dosyasının başına custom autocompletebox Class ını oluşturdum. Daha sonra main page.xaml sayfasından bu classı kullanarak autocompletebox ve listbox ekledim. Ve aynı sayfaya bu custom classın referansını ekledim. Ancak does not exist in namespace diye bir hata aldım. Fonksiyon namespace de bulunamıyor. Ne yapmalıyım?
picture-472-1375079047.jpg
mehmet.altiparmak
11.11.2013 - 09:20

Merhaba Ömer,

http://phone.codeplex.com/SourceControl/latest adresinde Windows Phone Toolkit'in kaynak kodunu bulabilirsin. Bu kütüphane Windows Phone SDK'sını geliştiren takım tarafından geliştiriliyor yazan amcalar işin merkezinden yani :) O yüzden kodu incelemek çok şey katabiliyor insana. 

Ben soruna çözüm araştırırken açtım AutoCompleteBox kontrolünün kodunu biraz kurcaladım, gördüğüm kadarıyla filtrelenen object listesi public olarak dışarıya açılmamış. Yapmam gerekenin private ya da protected olarak tanımlanmış bu listeyi public olarak açmak olduğunu düşünüp kodu okurken SelectionAdapter adında protected olarak tanımlanmış bir property'nin ItemsSource özelliğinde bu filtrelenmiş listenin bulunduğunu gördüm. AutoCompleteBox'ı inherit edip bu protected property'yi aşağıdaki gibi public olarak açtım. 

using System.Collections;
using Microsoft.Phone.Controls;

namespace PhoneApp1
{
    public class CustomAutoCompleteBox : AutoCompleteBox
    {
        public IEnumerable FilteredItemsSource
        {
            get { return SelectionAdapter.ItemsSource; }
        }
    }
}

Daha sonra sayfamda AutoCompleteBox yerine inherit ederek oluşturduğum CustomAutoCompleteBox kontrolünü ve örnek bir ListBox'ı aşağıdaki gibi kullandığımda çalıştığını gördüm.

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

            <phoneApp1:CustomAutoCompleteBox x:Name="AutoCompleteBox" />

        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox x:Name="Lst" Height="400" Width="480" ItemsSource="{Binding ElementName=AutoCompleteBox, Path=FilteredItemsSource}"></ListBox>
            <!--<Button Content="Terminate Application" Click="ButtonBase_OnClick" />-->

        </Grid>