View Full Version : سوال: مشکل با مقدار دادن به تکس باکس
water_lily_2012
چهارشنبه 02 آذر 1390, 14:56 عصر
سلام
من از کد زیر برای ساخت یک textBox استفاده کرده ام.
<TextBox x:Name="NumberOfHonestyTextBox" Text="{Binding NumberOfHonesty,UpdateSourceTrigger=Explicit}" FlowDirection="RightToLeft" HorizontalAlignment="Right" TextWrapping="NoWrap" Height="31.43" Margin="0,178.58,90,0" VerticalAlignment="Top" Width="140" Style="{DynamicResource TextBoxStyle}"
می خواهم. در برنامه مقدار به textBox بدهم باید چه کار کنم. مثلا می خواهم بنویسم
NumberOfHonestyTextBox.text="123";
مهدی فرزاد
چهارشنبه 02 آذر 1390, 21:01 عصر
سلام
من متوجه مشکل نمیشم!! با همون کدی که نوشنی باید مقدار یگیره!!!!!! اگر درست کار نمیکنه مشکل از استایل هست
water_lily_2012
پنج شنبه 03 آذر 1390, 09:47 صبح
من خاصیت Text را در استایل حذف کردم، کدی که نوشتم کار داد ولی وقتی این خاصیت باشه کار نمیده.
فکر کنم تا وقتی Binding و UpdateSourceTrigger باشه کد پر کردن دستی کار نمیده.
Amir Oveisi
پنج شنبه 03 آذر 1390, 20:44 عصر
ُTextBox.Text یک dependency property هست و dependency property ها بر اساس ویژگی ای که دارند میتونن مقدارشون رو از provider های مختلف بگیرند. بین این provider ها چنین اولویتی وجود داره:
http://www.wpftutorial.net/images/valueresolution.jpg
همونطور که می بینید اولویت binding از local value بالاتر هست. پس تا زمانی که یک dependency property به چیزی bind شده باشه local value اعمال نمیشه روش.
اطاعات کامل تر:
http://msdn.microsoft.com/en-us/library/ms743230.aspx
water_lily_2012
یک شنبه 06 آذر 1390, 16:23 عصر
تشکر
حالا من چه کار می توانم انجام دهم که بایند را داشته باشم و مقدار هم بتوانم بدهم.
یعنی راهی نداره.
نمیشه از طریق همان بایند بهش مقدار داد.
Amir Oveisi
یک شنبه 06 آذر 1390, 16:59 عصر
اصلا ابن کار منطق درستی نمیتونه داشته باشه. چون زمانی که فیلدی رو به یک منبعی bind می کنیم یعنی میخوایم که مقدارش رو از اون منبع بگیره همیشه. در این حالت این که بخوایم خودمون مقدار اون فیلد رو تغییر بدیم با مهفموم binding در تضاد هست. اگر شما سناریویی رو که برای انجامش باعث شده به این نتیجه برسید که هم bind کنید و هم خودتون مستقیم مقدار بدید بگید تا بشه در موردش نظرات دقیق تری داد.
water_lily_2012
سه شنبه 08 آذر 1390, 16:01 عصر
من در فرمم چند تکس باکس دارم که اگر در فرم اصلی روی یک سطر دیتاگرید کلیک کنیم و سپس این فرم را باز کنیم تکس باکس ها نسبت به آن سطر پر می شود.
اما گاهی نیاز هست که یک تکس باکس را جدا پر کنم و مقدار جدیدی از کلاس BLL بگیرم.
Amir Oveisi
سه شنبه 08 آذر 1390, 19:03 عصر
خوب شما Textbox ها رو به یک property از BLL اتون Bind کنید به شکل TwoWay. حالا اگر مقدار Textbox.Text ها تغییر کنه (بصورت دستی) مقدار اون property هم تغییر میکنه در BLL و میتونید با مقادیر جدید کاری رو که میخواین انجام بدید.
در واقع Textbox ها رو مستقیم به Gridview تون Bind نکنید بلکه با انتخاب هر آیتم در Gridview مقدار اون Property رو در BLL تغییر بدید تا Textbox های bindشده مقدار بگیرند و با TwoWayکردن این binding میتونین تغییرات دستی Textbox ها رو هم در اون property داشته باشید.
water_lily_2012
چهارشنبه 09 آذر 1390, 08:57 صبح
خوب شما Textbox ها رو به یک property از BLL اتون Bind کنید به شکل TwoWay. حالا اگر مقدار Textbox.Text ها تغییر کنه (بصورت دستی) مقدار اون property هم تغییر میکنه در BLL و میتونید با مقادیر جدید کاری رو که میخواین انجام بدید.
اگر لطف کنید با چند خط کد توضیح بدهید، منظورتون از بایند به صورت TwoWay چیست. یعنی اگر من مقدار Text یک تکس باکس را تغییر دهم مقدار داخل تکس باکس نمایش داده می شود.
بایند کردن من الان به این صورت هست:
Text="{Binding FatherName}"
و property های من هم به این صورت:
public string FName { get; set; }
public string LName { get; set; }
public string FatherName { get; set; }
public string CardNumber { get; set; }
Amir Oveisi
چهارشنبه 09 آذر 1390, 11:02 صبح
خوب الان اين textbox كه نوشتيد رو كدوم window هست؟ اون property هايي كه تعريف كرديد در كدوم كلاس (يا لايه) هستند؟ gridview كجاست و آيتم انتخاب شدش چطور ارتباط پيدا مي كنه با بقيه؟
water_lily_2012
چهارشنبه 09 آذر 1390, 13:15 عصر
خوب الان اين textbox كه نوشتيد رو كدوم window هست؟ اون property هايي كه تعريف كرديد در كدوم كلاس (يا لايه) هستند؟ gridview كجاست و آيتم انتخاب شدش چطور ارتباط پيدا مي كنه با بقيه؟
تکس باکس روی Window فرعی که از ویندوز اصلی باز میشه. گرید روی ویندوز اصلی هست. Property ها هم در کلاس BLL.BLLMember.
این هم روش ارسال اطلاعات گرید به فرم و تکس باکس هایش:
BLL.BLLMember member = this.MemberDataGrid.CurrentItem as BLL.BLLMember; //بدست آوردن اطلاعات سلول های دیتاگرید
AddMember addMember = new AddMember(Tab3CodeTextBox.Text, member.Picture) { Owner = this, DataContext = MemberDataGrid.SelectedItem };
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.