ورود

View Full Version : حرفه ای: بایند کردن property در ViewModel به یک DP در UserControl



yavar00111
شنبه 22 مهر 1391, 09:25 صبح
سلام
من از معماری MVVM استفاده میکنم.
یک Propery توی ViewModel دارم و یک DependencyProperty هم در UserControl ام دارم، وقتی مقدار DP تغییر میکنه مقدار Property من توی VM هم تغییر میکنه ولی بلعکس این موضوع صادق نیست.

ViewModel

private byte row1;
public byte Row6
{
get
{
return row6;
}
set
{
if (row6 != value)
{
row6 = value;
OnPropertyChanged("Row6");
}
}
}


UserControl:

public static readonly DependencyProperty Row1Property =
DependencyProperty.Register("Row1", typeof(byte), typeof(CUCDepotStructure), new FrameworkPropertyMetadata(byte.MinValue));
public byte Row1
{
get { return (byte)GetValue(Row1Property); }
set
{
SetValue(Row1Property, value);
UpdateColumn(1, value);
}
}


این هم بایندینگ من در View:


Row1="{Binding Row1,Mode=TwoWay,UpdateSourceTrigger=PropertyChang ed}"


تا الان کلی سرج کردم ولی به نتیجه ای نرسیدم.

مهدی فرزاد
شنبه 22 مهر 1391, 10:14 صبح
سلام
این متد UpdateColumn کارش چیه؟ شما باید از
PropertyChanged برای ایجاد تغییرات در UserControl استفاده کنید(value Changed Callback) نه اینکه در Set این کار رو بکنید
دقت کنید برای این کار ورودی های متد new FrameworkPropertyMetadata هم متناسب با این کار تغییر میکنه
این لینک رو ببینید
http://www.wpftutorial.net/dependencyproperties.html