سؤال

لدي مشكلة بسيطة في إعداد بيانات ثنائية الاتجاه لمربع الاختيار في 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 من تعبير الربط غير المقيد ، فلن يلاحظ واجهة المستخدم أيضًا تغيير البيانات الأساسية حتى إذا كان النموذج ينفذ الواجهة.

كيف أفعل ل:

  1. اطلب من خانة الاختيار ملزمة للبيانات عند بدء التشغيل
  2. اطلب من تغيير مربع الاختيار تغيير لتعديل البيانات الأساسية
  3. هل اكتشف مربع الاختيار تغيير البيانات الأساسية وتحديثها؟
هل كانت مفيدة؟

المحلول

لديك خطأ في التسلسل في إجراء خاصية SET الخاصة بك ، تحتاج إلى تعيين إلى _value قبل إخطار التغيير:-

    set
    {
        this._value = value;
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top