PDA

View Full Version : اضافه کردن یک خصوصیت به کنترل AutoCompleteBox



aghayex
سه شنبه 20 فروردین 1392, 17:55 عصر
با سلام
دوستان من می خوام ار کنترل AutoCompleteBox استفاده کنم اما به دلایلی از جمله نبود خصوصیاتی شبیه به کمبوباکس در استفادش گیر کردم حالا می خام خودم این خصوصیات رو به کنترل AutoCompleteBox اضافه کردم این خصوصیات همون selectedvalue , valuememberpath هست .
AutoCompleteBox یه خصوصیت داره به نام selecteditem که میاد یک رکورد رو بهت میده در صورتی که من فقط مقدار اون ستون رو که در valuememberpath ست کردم رو می خوام
برا همین کار اومدم یه کلاس درست کردم که از کنترل valuememberpath ارث بری می کنه بعدشت اومدم یه متغیر استرینگ برا valuememberpath درست کردم که کار ذخیره نام ستون داده است
یه پروپرتی تعریف کردم از نوع اینت که کارش باید جدا کردن مقدار ستون مورد نظر از اون رکورد selecteditem هست که اینجاش موندم

aghayex
چهارشنبه 21 فروردین 1392, 07:31 صبح
دوست عزیز مطلبی که در اون تاپیک شما زحمتشو کشیدی در برنامه من درست نیست چون entity من شامل خصوصیات یک شخص هست و یک بندش مربوط به ذخیره ای دی اون رکورد در autocompletebox هست وقتی خصوصیت seleteitemرو به entity.jens بایند می کنید عملا اومدید یک مقدار اینت رو به یهرکورد بایند کردید که این اصلا درست نیست

aghayex
چهارشنبه 21 فروردین 1392, 18:52 عصر
دوست عزیز م در واقع دارم با wpf c# کار می کنم و کدش هم تقریبا میشه:

<Autocompletebox seceteditem="{binding newperson.jens}" >

Mahmoud.Afrad
چهارشنبه 21 فروردین 1392, 20:35 عصر
اگر توی بخش WPF مطرح میکردی بهتر بود.
ببین مدل من یک Entity به اسم Tbl با دو پراپرتی Id,Name داره. به صورت زیر من بایند کردم:

<my:AutoCompleteBox Name="autoCompleteBox1" ItemsSource="{Binding}" ValueMemberPath="Name" Height="28" Margin="0,0,78,283" Width="425">
<my:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</my:AutoCompleteBox.ItemTemplate>
</my:AutoCompleteBox>

<TextBlock Name="textBlock1" Text="{Binding ElementName=autoCompleteBox1, Path=SelectedItem.Id}" Height="35" Margin="41,102,261,174" Width="201" />

و در CodeBehind به DataContext مقدار دادم:

public partial class MainWindow : Window
{
DataAccess.Database1Entities model;

public MainWindow()
{
InitializeComponent();

model = new DataAccess.Database1Entities();
this.autoCompleteBox1.DataContext = model.Tbl;
}

همونطور میبینی TextBlock را به SelectedItem بایند کردم و با انتخاب از گزینه های اتوکامپلت Id اون را نمایش میده.

اگر هم میخوای TextBlockرا حذف کنی به همونصورت که قبلا گفتم از رویداد SelectedChange استفاده کن. در این رویداد SelectedItem را به Entity مورد نظر Cast کن:

private void autoCompleteBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Tbl t = autoCompleteBox1.SelectedItem as Tbl;
if (t != null)
{
// Use t
// for example
textBlock1.Text = t.Id.ToString();
}
}

aghayex
پنج شنبه 22 فروردین 1392, 23:25 عصر
خیلی خیلی تشکر
آیا راهی نیست که من بتونم کد نویسی رو حذف کنم مثل کار کردن با کمبوباکس ها یا اینکه بیایم یه کلاس از نوع AutoCompleteBox تولید کنیم و همین کارها رو در اونجا تحت عنوان یه خصوصیت پیاده سازی کرد ؟
یه مورد دیگه میمونه و اونم اینه که برعکس اون چی میشه یعنی من یه عدد داری که ای دی یک item هست و بخوام اونو به AutoCompleteBox بدم و نام اون رکورد رو نشون بده ؟