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
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);
}
}
Nasıl bir toplu iş dosyası komut satır...
Nasıl Android bir aktivite nesnesi geç...
Nasıl C fonksiyonları nesneleri geçirm...
Nasıl benim bir işlev için tüm değişke...
Nasıl İplik yöntemi ThreadStart parame...