SORU
1 Mart 2010, PAZARTESİ


Nasıl ViewModel için UI Memuru geçirmek için

Bu ViewModel geçmek istiyorum Görünümüne ait Dispatcher erişim hakkı olması gerekiyor. Ama Görünümü ViewModel, nasıl geçer misiniz? hakkında bir şey bilmesi gerekmiyor Bir arabirim veya örnekleri geçirmeden yerine Görünüm tarafından yazılacak küresel dağıtıcı bir tek oluşturmak tanıtmak? Nasıl MVVM uygulamalar ve Çerçeveleri bu çözersin?

EDİT: benim ViewModels arka plan iş parçacığı oluşturulan olabilir bu yana sadece ViewModel kurucu Dispatcher.Current yapamam Unutmayın.

CEVAP
1 Mart 2010, PAZARTESİ


Dağıtıcı bir arabirim kullanarak soyutlanmış varİContext:

public interface IContext
{
   bool IsSynchronized { get; }
   void Invoke(Action action);
   void BeginInvoke(Action action);
}

Bu birim test ViewModels daha kolay bir avantaja sahiptir.< / ^ br . Benim ViewModels içine arabirimi MEF (Kullanildigini Çerçevesinde Yönetilen) kullanarak enjekte edin. Başka bir ihtimal daha yapıcı bir argüman olabilirdi. Ancak, enjeksiyon MEF fazla kullanmayı seviyorum.

Güncelleme (yorum pastebin linki örnek):

public sealed class WpfContext : IContext
{
    private readonly Dispatcher _dispatcher;

    public bool IsSynchronized
    {
        get
        {
            return this._dispatcher.Thread == Thread.CurrentThread;
        }
    }

    public WpfContext() : this(Dispatcher.CurrentDispatcher)
    {
    }

    public WpfContext(Dispatcher dispatcher)
    {
        Debug.Assert(dispatcher != null);

        this._dispatcher = dispatcher;
    }

    public void Invoke(Action action)
    {
        Debug.Assert(action != null);

        this._dispatcher.Invoke(action);
    }

    public void BeginInvoke(Action action)
    {
        Debug.Assert(action != null);

        this._dispatcher.BeginInvoke(action);
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BioHunta

    BioHunta

    28 Mayıs 2006
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010