سؤال

لدي قالب تحكم مع زر تبديل.يحتوي ToggleButton على خاصية IsChecked الخاصة به بطريقة واحدة مرتبطة بخاصية التبعية.إذا قمت بتعيين خاصية التبعية بشكل صريح فإن الربط يعمل.

المشكلة هي بعد أتفاعل مع زر التبديل في واجهة المستخدم، ولا تقوم الارتباطات بتحديث خاصية IsChecked إذا قمت بتعيين خاصية التبعية بشكل صريح.

لدي عمل حول استخدام ربط TwoWay والذي يعمل بشكل جيد.سؤالي هو لماذا يتصرف بهذه الطريقة؟هل فاتني شيء؟هل يوجد خطأ في آلية ربط Silverlight؟

تعديل لتضمين المقتطف:

يبدو الارتباط الموجود في ControlTemplate (يمكن استبداله بـ TemplateBinding)

<ToggleButton x:Name="PlayPause" Grid.Column="0" 
              IsChecked="{Binding Paused, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
              HorizontalAlignment="Center"
              Width="50" Height="50"/>

الإعداد الصريح لخاصية التبعية هو المعيار الخاطئ إلى حد ما:

myComponent.Paused = true;
هل كانت مفيدة؟

المحلول

يحذف WPF الارتباطات ذات الاتجاه الواحد عندما يتم تعديل الخاصية الهدف (IsChecked في هذه الحالة).يستخدم Silverlight للاحتفاظ بالربط عند تعديل IsChecked.إذا تم تعيين "متوقف مؤقتًا" لاحقًا، فستحل هذه القيمة محل IsChecked أيضًا.

وفقًا لك، يبدو أن Silverlight قد عاد إلى سلوك WPF.اوه حسناً.أنا شخصياً أعتبر تعديل خاصية مرتبطة خطأً.إذا لم يكن المقصود من الخصائص أن تكون متزامنة، فقد يكون الأمر حلاً أفضل.

نصائح أخرى

  1. يجب عليك استخدام ربط TwoWay
  2. تأكد من أن الكائن الذي يحتوي على الخاصية المتوقفة مؤقتًا يدعم INotifyPropertyChanged.
  3. تأكد من أن أداة ضبط الإيقاف المؤقت تقوم بتشغيل حدث PropertyChanged
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top