PDA

View Full Version : سوال: رخ ندادن وقفه PropertyChanged در DependencyProperty از نوع <ObservableCollection<string



md3848
جمعه 27 فروردین 1400, 15:17 عصر
سلام، یه DependencyProperty از نوع <ObservableCollection<string ایجاد کردم، حالا وقتی به کمک متد list.Add، آیتمی میخوام بهش اضافه کنم، وقفه PropertyChanged رخ نمیده، چرا؟ و چطور حلش کنم.

این کد DependencyProperty من هستش :
public static readonly DependencyProperty SelectedItemsProperty = DependencyProperty.Register( "SelectedItems",
typeof(ObservableCollection<string>),
typeof(MultiSelectComboBoxUC),
new FrameworkPropertyMetadata(
new ObservableCollection<string>(),
FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefa ult,
new PropertyChangedCallback(SelectedItemsPropertyChang ed)));


public ObservableCollection<string> SelectedItems
{
get { return (ObservableCollection<string>)GetValue(SelectedItemsProperty); }
set { SetValue(SelectedItemsProperty, value); }
}


private static void SelectedItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Debug.WriteLine("SelectedItemsPropertyChanged");
}

وقفه کلیک روی Checkbox هم وقتی رخ میده، یه آیتمی به list بالا میخوام اضافه کنم، ولی وقفه PropertyChanged رخ نمیده :
private void CheckBox_Click(object sender, RoutedEventArgs e){
Debug.WriteLine("CheckBox_Click");


if (SelectedItems.Contains("test"))
SelectedItems.Remove("test");
}

the king
جمعه 27 فروردین 1400, 15:57 عصر
سلام، یه DependencyProperty از نوع <ObservableCollection<string ایجاد کردم، حالا وقتی به کمک متد list.Add، آیتمی میخوام بهش اضافه کنم، وقفه PropertyChanged رخ نمیده، چرا؟ و چطور حلش کنم.

این کد DependencyProperty من هستش :
public static readonly DependencyProperty SelectedItemsProperty = DependencyProperty.Register( "SelectedItems",
typeof(ObservableCollection<string>),
typeof(MultiSelectComboBoxUC),
new FrameworkPropertyMetadata(
new ObservableCollection<string>(),
FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefa ult,
new PropertyChangedCallback(SelectedItemsPropertyChang ed)));


public ObservableCollection<string> SelectedItems
{
get { return (ObservableCollection<string>)GetValue(SelectedItemsProperty); }
set { SetValue(SelectedItemsProperty, value); }
}


private static void SelectedItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Debug.WriteLine("SelectedItemsPropertyChanged");
}

وقفه کلیک روی Checkbox هم وقتی رخ میده، یه آیتمی به list بالا میخوام اضافه کنم، ولی وقفه PropertyChanged رخ نمیده :
private void CheckBox_Click(object sender, RoutedEventArgs e){
Debug.WriteLine("CheckBox_Click");


if (SelectedItems.Contains("test"))
SelectedItems.Remove("test");
}

وقتی خود SelectedItems با <ObservableCollection<string دیگری جایگزین بشه SelectedItems تغییر کرده و SelectedItemsPropertyChanged رخ داده.
ولی وقتی آیتم های داخل SelectedItems تغییر کنند دیگه <ObservableCollection<string که تغییری نکرده، همونه که بود.
رخداد ObservableCollection<T>.CollectionChanged (https://docs.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.observablecollectio n-1.collectionchanged?view=net-5.0) رو به یک متد متصل کنید تا با تغییرات داخلش متوجه تغییر بشوید.

md3848
جمعه 27 فروردین 1400, 17:08 عصر
آره همین کارو کردم درست شد :متفکر::گریه:
ObservableCollection<string> SelectedItemsBuff = new ObservableCollection<string>();
foreach (var item in SelectedItems)
SelectedItemsBuff.Add(item);

//...

SelectedItems = SelectedItemsBuff;
ممنون