ورود

View Full Version : سوال: ارسال مقدار رشته ای از یوزر کنترل به فرم و نمایش آن در یک لیبل



rg_BlackRose
سه شنبه 23 آبان 1391, 22:42 عصر
با عرض سلام و خسته نباشید خدمت دوستان و اساتید محترم


من درون یک برنامه از یک یوزر کنترلی که خودم ساختم استفاده میکنم

عکسش رو در پایین گذاشتم

*کادر قرمز رنگ محیط یوزرکنترل هست که با اجرای برنامه به فرم اضافه میشه

*کادر سبز رنگ پایین فرم هم محیط لیبل هست که بر روی خود فرم قرار داده شده

94878

حالا سوالی که دارم اینه

چطوری میتونم وقتی روی دکمه "ذخیره" کلیک شد و بعد از اتمام دستورات ذخیره پیغامی رو مبنی بر موفقیت و یا عدم موفقیت در ذخیره داده ها رو در لیبل پایین فرم نشون بدم.

قابل ذکر که من از کد زیر درون یوزر کنترل استفاده میکنم اما هیچ پیغامی نشون داده نمیشه

My.Windows.MainWindow.Label1.Content="پیغام متنی که باید نمایش داده بشه"


ممنون میشم اگه راهنماییم بکنید.

مهدی فرزاد
چهارشنبه 24 آبان 1391, 08:24 صبح
سلام
اول اینکه کنترل Label خاصیت تکس نداره و شما باید Content اون رو مقدار دهی کنید

شما میتونید Property در برنامه داشته باشید که به خاصیت Content کنترل label بایند شده باشه و با مقدار دهی به این Property کنترل شما هم مقدار خواهد گرفت

rg_BlackRose
چهارشنبه 24 آبان 1391, 16:07 عصر
سلام

ممنون آقای فرزاد که راهنمایی فرمودید.

اگر بیشتر راهنمایی بکنید ممنون میشم



شما میتونید Property در برنامه داشته باشید

Property که فرمودید کجا باید باشه؟ درون UserControl یا MainWindow




که به خاصیت Content کنترل label بایند شده باشه

بایند کردن Property به Content لیبل چطوری باید انجام بشه؟

باز هم ممنون که وقت گذاشتید و پاسخ دادید.

مهدی فرزاد
شنبه 27 آبان 1391, 08:33 صبح
سلام به این شکل میتونید عمل کنید

ابتدا یک کلاس که از INotifyPropertyChanged ارث بری میکنه میسازیم (من با نام MessageTitle ساختم)
. در اون Property با نام Message ایجاد میکنیم به شکل زیر

class MessageTitle : INotifyPropertyChanged
{

private string _message;

public string Message
{
get { return _message; }
set
{
if (_message == value) return;
_message = value;
raisePropertyChanged("Message");
}
}

public event PropertyChangedEventHandler PropertyChanged;
void raisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler == null) return;
handler(this, new PropertyChangedEventArgs(propertyName));
}
...
...


حالا نیاز داریم که در برنامه به شکل استاتیک به پراپرتی بالا دسترسی داسته باشیم پس در ادامه کلاس این کد رو میشه نوشت ( یا در کلاس دیگه)


static MessageTitle _messageTitles = new MessageTitle();
public static MessageTitle MessageTitles
{
get { return _messageTitles; }
set { _messageTitles = value; }
}

به سراغ اون اون پنجره ای میریم که لیبل در اون هست
در کد Xaml اون پنجره ابتدا باید فضای نام کلاسی رو که در بالا نوشتیم معرفی کنیم
در مثالی که من نوشتم فرض میکنیم فضای نام به نام WPF1 باشید پس این کد رو مینویسم

xmlns:local="clr-namespace:WPF1"

حالا در کد Xaml مربوط به لیبل به این شکل بنویسد

<Label Content="{Binding MessageTitles.Message}" .... >
<Label.DataContext>
<local:MessageTitle/>
</Label.DataContext>
</Label>


دیگه کار تمام است و هرجا شما بخواید به لیبل مقدار بدید کافیه مثلا به شکل زیر کد بنویسید

MessageTitle.MessageTitles.Message = "OK";