سؤال

ولدي التحكم المخصصة سيلفرلايت مع اثنين من الخصائص. النص ورقم. لقد خلق DependencyProperties لهذه حسب الكود بالأسفل.

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged));
public static readonly DependencyProperty IdProperty = DependencyProperty.Register("Id", typeof(Guid?), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged));

public event PropertyChangedEventHandler PropertyChanged;

public static void NotifyPropertyChanged(object sender, DependencyPropertyChangedEventArgs args)
{
    var control = sender as LookupControl;
    if (control != null && control.PropertyChanged != null)
    {
        control.PropertyChanged(control, new PropertyChangedEventArgs("Text")); 
    }
}
public Guid? Id
{
    get { return (Guid?)GetValue(IdProperty); }
    set { SetValue(IdProperty, value); }
}

public string Text
{
    get { return (string)GetValue(TextProperty); }    
    set { SetValue(TextProperty, value); }
}

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

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

هل كانت مفيدة؟

المحلول

والباردة قمت بحفظ القيم ووضع فقط عندما يكون لديك على حد سواء؟

    private Guid? id;
    private string text;

    public Guid?Id
    {
        get { return id; }
        set { 
            id = value;
            TrySetValue();
        }
    }
    public string Text 
    { 
        get { return text; }
        set { text = value;
        TrySetValue()} 
    }

    private void TrySetValue()
    {
        if (id != null && text != null)
        {
            SetValue(IdProperty, id);
            SetValue(TextProperty, text);
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top