MVVM

2016-04-14 26 views
0

ile iki kullanıcı denetimi arasındaki iletişim (biri diğerini içerir) MVVM, .NET Framework 4.6.1 ve C# ile bir WPF geliştiriyorum.MVVM

<Grid x:Name="gridStartBatch" Margin="30" Grid.RowSpan="6" Grid.ColumnSpan="3" Visibility="{Binding GridStartBatchVisibility}"> 
    <local:StartBatch x:Name="userControlStartBatch" /> 
</Grid> 

Ben GridStartBatchVisibility değerini değiştirerek StartBatch kullanıcı kontrolü gösterir:

Ben iki kullanıcı Kontrolörler, diğeri içeride bir tane var. StartBatchViewModel günü

ben FirstControlViewModel iletmek istediğimiz üç özelliklere sahip ve aynı zamanda ben StartBatch gizlemek için GridStartBatchVisibility değerini değiştirmek için FirstControlViewModel bildirmek istiyorum.

FirstControlViewModelStartBatchViewModel aracılığıyla erişmek için var mı?

+0

Üçüncü taraf bir çerçeve kullanmanız gerekmez. Komut Kalıbına bakın: https://en.wikipedia.org/wiki/Command_pattern ve nihayetinde görünüm modellerinizi enjekte eden bir çeşit denetleyici kullanın. – Daltons

cevap

2

Görünüm modelleri ile birçok nokta arasında iletişim kurmanın birçok yolu vardır. Sen nasıl yapıldığını görebilirsiniz: Bence

, en iyi yaklaşım Prizma çerçevesinin EventAggregator deseni kullanıyor. Prism, MVVM modelini basitleştirir. Ancak, Prism kullanmamışsanız, Rachel Lim'in öğreticisini kullanabilirsiniz - simplified version of EventAggregator pattern by Rachel Lim. Rachel Lim'in yaklaşımını tavsiye ederim. Rachel Lim öğretici kullanırsanız

, o zaman ortak bir sınıf oluşturmak olmalıdır:

public static class EventSystem 
{...Here Publish and Subscribe methods to event...} 

Ve OptionViewModel içine bir olay yayımlamak: o zaman

eventAggregator.GetEvent<ChangeStockEvent>().Publish(
new TickerSymbolSelectedMessage{ StockSymbol = “STOCK0” }); 

Başka senin MainViewModel kurucusunda abone Bir etkinliğe:

eventAggregator.GetEvent<ChangeStockEvent>().Subscribe(ShowNews); 

public void ShowNews(TickerSymbolSelectedMessage msg) 
{ 
    // Handle Event 
} 

Rachel Lim'in sadeleştirilmiş uygulaması oach, gördüğüm en iyi yaklaşım. Ancak, büyük bir uygulama oluşturmak istiyorsanız, bu article by Magnus Montin ve CSharpcorner with an example numaralı telefondan okumanız gerekir.

+0

Evet, herhangi bir çerçeve kullanmıyorum. Üçüncü taraf bir MVVM çerçevesi kullanmak istemiyorsanız – VansFannel

+0

@VansFannel. 1) Kendi Messenger sınıfınızı uygulayın. 2) olayları kullanın ve VM'lerin birbirlerinin olaylarına abone olmasını sağlayın. Bahsedilen; MVVM sadece INotifyPropertyChanged'i uygulayan tek bir sınıf değildir. Birden fazla parçadan oluşan bir tasarım deseni ve Haberciler bunun bir parçası. Üçüncü taraf bir çerçeve kullanmak, kendi başınızı döndürmeye çalışmaktan daha kolaydır. – StepUp

+0

@VansFannel, bir çerçeve kullanmıyorsanız ve MVVM desenini gözlemlemek istiyorsanız, bir çerçevenin tüm temel özelliklerini kendinizin uygulamak zorunda kalacağınızı ve sizce daha iyi olduğunu düşündüğünüzü düşünün. birçok geliştiricinin kullandığı, kodunuzdaki tüm bu işlevselliği yeniden oluşturduğunuz, hakemli, açık kaynaklı bir çerçeve oluşturduysanız, kendi başınıza mı? – StepUp