فرض کنید در یک لیست، تعداد زیادی صفر وجود دارند و تنها معدودی از آنها دارای مقداری متفاوت هستند. شاید بد نباشد برای کاهش نویز صفحه، صفرها نمایش داده نشوند و در کل لیست، فقط مقادیر بیشتر از صفر مشخص باشند. برای اینکار راه حلهای زیادی وجود دارند؛ منجمله، استفاده از تبدیلگرها. اما با استفاده از تریگرهای WPF اینکار را با چند سطر کد ساده، در همان فایل XAML یا یک شیوهنامه جدید میتوان انجام داد.
تعریف تریگر مخفی سازی یک برچسب ...
AvalonEdit یکی از زیرساختهای برنامهی SharpDevelop است که ویرایشگر متنی به همراه syntax highlighting زبانهای مختلف را در آن پشتیبانی میکند. کیفیت بالایی داشته و بسیاری از برنامههای دیگر نیز از آن جهت ارائه ویرایشگر و یا syntax highlighting متون ارائه شده، استفاده میکنند. در ادامه نحوهی استفاده از این ویرایشگر را در برنامههای WPF خصوصا با دید MVVM بررسی خواهیم کرد.
دریافت و نصب AvalonEdit
...
شاید برای شما هم پیش آمده باشد که بخواهید در هر بار واکشی لیستی از اطلاعات، مثلا از دیتابیس، آیتمهای آن را بصورت تصادفی مرتب کنید.
من در پروژه اخیرم برای نمایش یک سری سوال مجبور بودم که در هر بار نمایش سوالات، لیست را به صورت رندوم مرتب کنم و به کاربر نمایش بدم. برای حصول این مهم، یک extension method به شکل زیر نوشتم: public static class RandomExtentions
{
public static void Shuffle<T>(this IList<T> ...
قصد داریم در مثال پست قبلی برای Command مورد نظر، عملیات اعتبارسنجی را فعال کنیم. اگر با الگوی MVVM آشنایی داشته باشید میدانید که میتوان برای Commandها اکشنی به عنوان CanExecute تعریف کرد و در آن عملیات اعتبارسنجی را انجام داد. اما از آن جا که پیاده سازی این روش زمانی مسیر است که تغییرات خواص ViewModel در دسترس باشد در نتیجه در WAF مکانیزمی جهت ردیابی تغییرات خواص ViewModel در کنترلر فراهم شده است. در نسخههای قبلی WAF (قبل از نسخه ...
در این پست قصد داریم مثال قسمت قبل را توسعه داده و پیاده سازی Commandها را در آن در طی یک مثال بررسی کنیم. از این جهت دکمهای، جهت حذف آیتم انتخاب شده در دیتا گرید، به فرم BookShell اضافه مینماییم. به صورت زیر:
<Button Content="RemoveItem" Command="{Binding RemoveItemCommand}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
Command تعریف شده در Button مورد نظر به خاصیتی به نام RemoveItemCommand در B ...
در این پست با مفاهیم اولیه این کتابخانه آشنا شدید. برای بررسی و پیاده سازی مثال، ابتدا یک Blank Solution را ایجاد نمایید. فرض کنید قصد پیاده سازی یک پروژه بزرگ ماژولار را داریم. برای این کار لازم است مراحل زیر را برای طراحی ساختار مناسب پروژه دنبال نمایید.
نکته: آشنایی اولیه با مفاهیم MEF از ملزومات این بخش است.
»ابتدا یک Class Library به نام Views ایجاد نمایید و اینتر ...
دز طراحی پروژههای مقیاس بزرگ و البته به صورت ماژولار همیشه ساختار پروژه اهمیت به سزایی دارد. متاسفانه این مورد خیلی در طراحی پروژهها در نظر گرفته نمیشود و اغلب اوقات شاهد آن هستیم که یک پروژه بسیار بزرگ دقیقا به همان صورت پروژهای کوچک و کم اهمیتتر مدیریت و پیاده سازی میشود که این مورد هم مربوط به پروژههای تحت وب و هم پروژههای تحت ویندوز و WPF است. برای مدیریت پروژههای WPF و Silverlight در این پست به اختصار درباره PRISM بحث شد. م ...
اگر در WPF سعی کنیم آیتمی را به مجموعه اعضای یک Collection مانند یک List یا ObservableCollection از طریق تردی دیگر اضافه کنیم، با خطای ذیل متوقف خواهیم شد: This type of CollectionView does not support changes to its SourceCollection
from a thread different from the Dispatcher thread
راه حلی که برای آن تا دات نت 4 در اکثر سایتها توصیه میشد به نحو ذیل است: Adding to an ObservableCollection from a background thread ...
کاربران بیشتر برنامههای فارسی تمایل دارند که توسط کلیدEnter درون فرمها حرکت کنند.در برنامههای WPF و مخصوصا زمانی که شما از الگوی MVVM استفاده میکنید ،انجام این کار اگر از روشهای مناسب استفاده نکنید تا حدودی سخت میشود. برای حرکت روی TextBoxها و کنترلهای مشابه میتوانید این کار را به راحتی با Register کردن رویداد مربوط به آن نوع کنترلها توسط EventManager یک بار در ابتدای برنامه انجام دهید. public partial class App : App ...
در نظر بگیرید که یک پروژه WPF را با الگوی MVVM پیاده سازی کرده اید و نیاز پیدا میکنید تا یک پنجره را از طریق کد ببندید. از آنجایی که به کنترل Window درون ViewModel دسترسی ندارید، نمیتوانید از متد Close آن برای اینکار استفاده کنید. راههای مختلفی برای اینکار وجود دارند، مثلا اگر از MVVM Light Toolkit استفاده میکنید با ارسال یک Message و نوشتن یک تکه کد در CodeBehind پنجره میتوانید اینکار را انجام بدهید. اما برای اینکار یک راه حل ساد ...