iranrose63
یک شنبه 05 تیر 1390, 10:45 صبح
سلام
من از RadDataFilter در برنامم MVVM استفاده میکنم چون FilterDescriptors یه خاصیت ReadOnly بود و قابل بایند شدن در xaml نبود من یه کلاس جدید ایجاد کردم با یه خاصیت جدید که قابل بایند کردن باشه و از اون تو برنامم استفاده می کنم ولی با وجود اینکه این خاصیت را با FilterDescriptors بایند کردم ولی با تغییر FilterDescriptors خاصیت جدید من تغییر نمیکنه . در ضمن دو رویداد dataFilter.FilterDescriptors.CollectionChanged و dataFilter.FilterDescriptors.ItemChanged هم raise نمیشند در نتیجه مقدار خاصیت جدید که من ایجاد کردم تغییر نمیکنه باید چیکار کنم تا مشکلم حل بشه ؟
البته اگر دوستان نظر دیگه ای به جای ایجاد کلاس جدید دارند تا من بتونم از FilterDescriptors در MVVM استفاده کنم ممنون میشم راهنماییم کنید
اینم کد کلاس من :
class DataFilter:RadDataFilter
{
public DataFilter():base()
{
Binding bind= new Binding()
{
Source = this,
Path = new PropertyPath("FilterDescriptors"),
Mode = BindingMode.OneWay,
UpdateSourceTrigger=UpdateSourceTrigger.PropertyCh anged
};
this.SetBinding(DataFilter.FilterDescriptorPropert y, bind);
this.FilterDescriptors.CollectionChanged += new System.Collections.Specialized.NotifyCollectionCha ngedEventHandler(FilterDescriptors_CollectionChang ed);
this.FilterDescriptors.ItemChanged += new EventHandler<ItemChangedEventArgs<IFilterDescriptor>>(FilterDescriptors_ItemChanged);
}
void FilterDescriptors_ItemChanged(object sender, ItemChangedEventArgs<IFilterDescriptor> e)
{
this.FilterDescriptor = this.FilterDescriptors;
}
void FilterDescriptors_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionCha ngedEventArgs e)
{
this.FilterDescriptor = this.FilterDescriptors;
}
public static readonly DependencyProperty FilterDescriptorProperty = DependencyProperty.Register("FilterDescriptor", typeof(CompositeFilterDescriptorCollection), typeof(DataFilter), new FrameworkPropertyMetadata());
public CompositeFilterDescriptorCollection FilterDescriptor
{
get { return GetValue(FilterDescriptorProperty) as CompositeFilterDescriptorCollection; }
set { SetValue(FilterDescriptorProperty, value); }
}
}
من از RadDataFilter در برنامم MVVM استفاده میکنم چون FilterDescriptors یه خاصیت ReadOnly بود و قابل بایند شدن در xaml نبود من یه کلاس جدید ایجاد کردم با یه خاصیت جدید که قابل بایند کردن باشه و از اون تو برنامم استفاده می کنم ولی با وجود اینکه این خاصیت را با FilterDescriptors بایند کردم ولی با تغییر FilterDescriptors خاصیت جدید من تغییر نمیکنه . در ضمن دو رویداد dataFilter.FilterDescriptors.CollectionChanged و dataFilter.FilterDescriptors.ItemChanged هم raise نمیشند در نتیجه مقدار خاصیت جدید که من ایجاد کردم تغییر نمیکنه باید چیکار کنم تا مشکلم حل بشه ؟
البته اگر دوستان نظر دیگه ای به جای ایجاد کلاس جدید دارند تا من بتونم از FilterDescriptors در MVVM استفاده کنم ممنون میشم راهنماییم کنید
اینم کد کلاس من :
class DataFilter:RadDataFilter
{
public DataFilter():base()
{
Binding bind= new Binding()
{
Source = this,
Path = new PropertyPath("FilterDescriptors"),
Mode = BindingMode.OneWay,
UpdateSourceTrigger=UpdateSourceTrigger.PropertyCh anged
};
this.SetBinding(DataFilter.FilterDescriptorPropert y, bind);
this.FilterDescriptors.CollectionChanged += new System.Collections.Specialized.NotifyCollectionCha ngedEventHandler(FilterDescriptors_CollectionChang ed);
this.FilterDescriptors.ItemChanged += new EventHandler<ItemChangedEventArgs<IFilterDescriptor>>(FilterDescriptors_ItemChanged);
}
void FilterDescriptors_ItemChanged(object sender, ItemChangedEventArgs<IFilterDescriptor> e)
{
this.FilterDescriptor = this.FilterDescriptors;
}
void FilterDescriptors_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionCha ngedEventArgs e)
{
this.FilterDescriptor = this.FilterDescriptors;
}
public static readonly DependencyProperty FilterDescriptorProperty = DependencyProperty.Register("FilterDescriptor", typeof(CompositeFilterDescriptorCollection), typeof(DataFilter), new FrameworkPropertyMetadata());
public CompositeFilterDescriptorCollection FilterDescriptor
{
get { return GetValue(FilterDescriptorProperty) as CompositeFilterDescriptorCollection; }
set { SetValue(FilterDescriptorProperty, value); }
}
}