سؤال

وهذا السؤال يشبه بعضها البعض سألت ، ولكن في حين أنه في هذه الحالة أريد أن أعرف عن فرض ملزم ل التحديث من XAML أو نموذج الرأي، في هذه الحالة كنت ترغب في معرفة حول التفاف هذا الأمر إلى FrameworkElement WPF المخصصة.

وظيفة أنا بعد فترة من النص الذي يشير إلى متى حدث شيء قبل.

<TextBlock Text="It happened " />
<my:AgeTextBlock SinceTime="{Binding OccurredAtUtc}" />
<TextBlock Text=" ago" />

وهذا من شأنه أن يجعل باسم (على سبيل المثال):

<اقتباس فقرة>   

حدث 1 دقيقة و 13 ثانية قبل

ولدي التعليمات البرمجية التي يحول من TimeSpan إلى النموذج الذي يمكن قراءته هو مبين.

في أجل الحصول على التحديث UI كل ثانية أنا تفكر في استخدام DispatcherTimer ثابت (فكرة من <لأ href = "https://stackoverflow.com/questions/949458/how-to-have-a-wpf- ملزم التحديث كل الثانية / 949616 # 949616 "> كينت Boogaart في الإجابة ).

وحتى هنا ما قلته:

public class AgeTextBlock : TextBlock
{
    private static readonly DispatcherTimer _timer;

    static AgeTextBlock()
    {
        _timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
    }

    public AgeTextBlock()
    {
        _timer.Tick += ...;
    }

    // How can I unsubscribe from the Tick event to avoid a memory leak?
}

والتعليق يشير مشكلتي. لا استطيع ان ارى كيف كنت تنظيف بشكل صحيح مع هذا النهج. ليس هناك طريقة لتجاوز Dispose وإزالة معالج الحدث.

ما هو نمط الموصى بها هنا؟

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

المحلول

لماذا لا الاشتراك في الحدث التجزئة في حال المحملة من السيطرة، وإلغاء الاشتراك في حالة تفريغ؟

نصائح أخرى

وفقط لأن TextBlock لا تنفذ IDisposable لا يعني أنك لا يمكن إضافة شرط واجهة وتنفيذ نفسك. يمكنك تنفيذ تخلص نفسك (لا تجاوز أي شيء من القاعدة) والتخلص من توقيت الخاص بك هناك.

وسوف من الواضح بعد ذلك مسؤولا عن التخلص من الطبقة AgeTextBlock الخاص بك. عليك أن تفعل ذلك في ويندوز الخاص بك يغلق حدث على سبيل المثال أو شيء من هذا القبيل.

و(بالتناوب، إذا كنت تتبع MVVM نمط ، ووضع توقيت الخاص بك على غرار الرأي، هل يمكن أن يصبح لديك IDisposable عرض نموذج ومجرد ربط بغية قيمة جهاز ضبط الوقت على نموذج عرض).

[تحرير: نعم، أفكر في هذا، وأنا لا أعتقد حقا هذا ينبغي أن يكون عنصر تحكم مخصص عكس WinForms عناصر، WPF ليس لديها مثل هذه الحاجة إلى عناصر التحكم المخصصة، بدلا من ذلك وأعتقد أنني سوف يعرض خاصية الموقت على بلدي نموذج عرض (ربما خاصية بحيث يكون لديك سلسلة قابلة للقراءة لطيفة مهيأ مسبقا) وربط تلك الممتلكات إلى مربع النص العادي - لا تحكم مخصص - ثم أود أن استخدام أسلوب أو قالب لقرص خصائص بصرية من مربع النص للبحث كيف أردت. كيف هذا الصوت؟]

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