PDA

View Full Version : سوال: پاس دادن چند پارامتر برای یک Command در WPF با استفاده از MVVM Light



abbasegold
سه شنبه 22 شهریور 1390, 11:35 صبح
سلام

من در حال نوشتن برنامه در WPF هستم و از الگوی MVVM و از MVVM Light Toolkit استفاده می کنم.

مشکلی که دارم این است که می خواهم به همراه Command بیشتر از یک پارامتر را ارسال کنم.
لازم به ذکر است که با توجه به استفاده از MVVM Light از RelayCommand استفاده می کنم.

با جستجو روشهایی پیدا کرده ام و متوجه شده ام که باید از MultiBinding برای CommandParameter استفاده کنم، اما بصورت کامل متوجه راه حل نشدم. ممنون می شوم اگر کمکم کنید.

اگر بتوانید یک مثال واقعی و کامل به من بدهید هم خیلی خوب است.

متشکرم

farashah_jalal
سه شنبه 22 شهریور 1390, 14:29 عصر
یعنی می خواهید برای یه کنترل دو تا بایندینگ انجام بدید؟

abbasegold
سه شنبه 22 شهریور 1390, 15:22 عصر
یعنی می خواهید برای یه کنترل دو تا بایندینگ انجام بدید؟

نه
یعنی برای یک Command بیش از یک CommandParameter داشته باشم.

abbasegold
سه شنبه 22 شهریور 1390, 15:52 عصر
بازم سلام
روش کار رو فهمیدم. اگر کس دیگری هم این مشکل براش پیش آمده بگه تا عرض کنم.

farashah_jalal
سه شنبه 22 شهریور 1390, 16:43 عصر
بازم سلام
روش کار رو فهمیدم. اگر کس دیگری هم این مشکل براش پیش آمده بگه تا عرض کنم.
خوب جواب رو بزارید تا بعدن اگه کسی با این مشکل برخورد کرد بتونه مشکلش رو حل کند
با تشکر

abbasegold
سه شنبه 22 شهریور 1390, 17:32 عصر
لینک دانلود اصلاح شد

سلام
برای این کار کافیست پارامترها را بصورت Property Element Syntax تعریف نمود. یعنی :


<Button Margin="5" Command="{Binding CalculateSum}" Content="Calculate Sum">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource Convertor}">
<Binding ElementName="txt1" Path="Text"/>
<Binding ElementName="txt2" Path="Text"/>
</MultiBinding>
</Button.CommandParameter>
</Button>

سپس برای آن یک Converter تعریف بکنیم که پارامترها را برای ViewModel آماده سازد:


public class MyConverter : IMultiValueConverter
{
#region IMultiValueConverter Members

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int[] intTemp = new int[2];
intTemp[0] = System.Convert.ToInt32(values[0]);
intTemp[1] = System.Convert.ToInt32(values[1]);
return intTemp;
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}

#endregion
}

حال در ViewModel به شکل زیر RelayCommand خود را می نویسیم :


public RelayCommand<int[]> CalculateSum
{
get;
private set;
}

ممکنه خوب توضیح نداده باشم. اگه با من موافق هستید :خجالت:فایل پیوست را دانلود کنید:

دانلود فایل پیوست (http://www.mediafire.com/file/4d4ngbogz5ic2iq/MultipleParameters.zip)

پیروز و پاینده باشید.

davoodrm666_666
چهارشنبه 23 شهریور 1390, 07:56 صبح
دوست عزیز فایل دانلود نمیشود...

abbasegold
چهارشنبه 23 شهریور 1390, 16:26 عصر
لینک دانلود اصلاح شد