مربع اختيار Silverlight في اتجاهين لا يعمل كما هو متوقع
-
20-09-2019 - |
سؤال
لدي مشكلة بسيطة في إعداد بيانات ثنائية الاتجاه لمربع الاختيار في Silverlight 3.0. يجب أن يكون غير عقلاني ، لكنني ربما نسيت عقلي إلى منزله اليوم ...
لقد حددت فئة نموذج لتمثيل .. "البيانات". لقد قمت بتطبيق واجهة InotifyPropertyChanged لتمكين واجهة المستخدم لمعرفة متى تتغير البيانات.
public class Model : INotifyPropertyChanged
{
private bool _value;
public bool Value
{
get { return this._value; }
set
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
this._value = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
بعد ذلك ، وضعت خانة اختيار وزر على .. 'form':
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>
<Button Click="Button_Click" Content="Test" />
</StackPanel>
ثم قمت بتزويد البيانات في المنشئ:
public MainPage()
{
InitializeComponent();
this.DataContext = new Model() { Value = true };
}
المشكلة هي أنه يتعين عليك النقر مرتين على خانة الاختيار من أجل التحقق/إلغاء تحديد ما لم أقوم بإلغاء تنفيذ inotifyPropertyChanged. ومع ذلك ، إذا لم تلاحظ واجهة المستخدم إذا قمت بتغيير البيانات الأساسية.
إذا قمت بإزالة الوضع = بت twoway من تعبير الربط غير المقيد ، فلن يلاحظ واجهة المستخدم أيضًا تغيير البيانات الأساسية حتى إذا كان النموذج ينفذ الواجهة.
كيف أفعل ل:
- اطلب من خانة الاختيار ملزمة للبيانات عند بدء التشغيل
- اطلب من تغيير مربع الاختيار تغيير لتعديل البيانات الأساسية
- هل اكتشف مربع الاختيار تغيير البيانات الأساسية وتحديثها؟
المحلول
لديك خطأ في التسلسل في إجراء خاصية SET الخاصة بك ، تحتاج إلى تعيين إلى _value
قبل إخطار التغيير:-
set
{
this._value = value;
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}