2012-11-24 11 views
7

TL ise; DR: Geçen paragrafa bakınız.Ayırma görünümleri, komut sunumu (Metin, Simge) ve komut mantık (Yürüt, CanExecute)

Saf WPF içine görüş ve komut mantığı (Yürütme, CanExecute yöntemleri) içine sunumu (kontrolleri, metin, simgeler) koyarak kod-arkasında "olduğunu düşünüyorum." Hem mantıksal görünümleri (CommandBindings) hem de uygulamada kaşınmaya karşı koyarken, XAML duplikasyon ile hiç yardımcı olmuyor: metin, simgeler, büyük simgeler, ipuçları ve diğer birçok özellik kopyalanmalıdır her seferinde bir komut kullanılır: ana menü için, içerik menüsü için, araç çubuğu düğmesi için, şerit düğmesi ve diğer kontroller için.

DelegateCommand, RelayCommand çözülür birinci problem (gerçek anlamda ayıran görüş ve mantık) Görünüşe ve bunun gibi yaklaşımlar. Komut mantığı ViewModels'e (veya MVVMC durumunda Kontrolörlere) taşınır, arkadaki kod temiz, CommandBindings no'lu ve görünümlerde başka anlamsız.

Ancak, sunum çoğaltılması sorununa ortak bir çözüm bulunması bulamıyor. Ben komut sunum (metin, simgeler) ve komut mantığını (Execute, CanExecute yöntemleri) ayırmak istiyorum. Ben de bulabildiğim tüm kod (Label ve Icon gibi ek özelliklere sahip bir RoutedCommand oluşturarak) koduna sunum koyar, ya da (görünümler içine yani işleyicileri ve kod arkasında) sunuya kodunu koyar. Ben de sevmiyorum. Sunumun tamamen XAML'de olması gerektiğini ve kodun tamamen CS'de (ViewModel veya Controller'da) olması gerektiğini düşünüyorum.

Soru: ViewModels içinde CanExecute vb komutların (kontrolleri ile XAML referans komutları) görüşlerini, komutların tanıtımı (etiketler, her komut için simgeler vb) ve mantık (Execute için C# kodu, ayırmak için nasıl ya Kontrolörler)?

+0

İki yakın oy zaten? Ve sıfır yorumlar? Bu soru unasnwerable mı yoksa bir şey mi özledim? Kapatmaya oy verirseniz, en azından bir yorum bırakın lütfen. Bana neyi yanlış yaptığımı söylemezsen öğrenemem. – Athari

+0

SSS'deki "yapıcı olmayan" açıklamayı okuyun - "bu soru büyük olasılıkla tartışma, tartışma, oylama veya genişletilmiş tartışma talep edecektir". Aynı şekilde, Yığın Taşması, "yazılımımı nasıl oluşturmalıyım?" Diye sormak için iyi bir yer değil. sorular. –

+2

@JeanHominal Gördüğüm kadarıyla, MY yazılımı nasıl oluşturulduğunu sormadım, bir sorunun sorduğunu düşündüm * çok yaygın *, bu sorunun çözülmediğini gördüğüm kodun ne kadar olduğunu düşünerek Microsoft'un kodunda bile. Ve oylamaya göre yargılamak (20 görüşten 5 +1 oy), bir çözüm bulmak isteyen tek kişi ben değilim. – Athari

cevap

4

Bu soruna yerleşik bir çözüm yok, sizin kollarınızı sarmak ve gerekli yapıyı kendiniz oluşturmak zorundasınız. Yeni bir projede

ben tam olarak bunu yaptı, çalıştı. WPF ICommand'u diğer görsel özelliklerle tamamlayan bir 'eylem' adında bir kavram oluşturdum. Bu

interface IAction 
{ 
    ICommand Command { get; } 
    string DisplayText { get; } 
    string ToolTipText{ get; } 
    URI Icon { get; } 
} 

uygulama Action durumlarda bir koleksiyon içerdiği ... böyle bir şey oldu. Bunlar daha sonra çeşitli farklı sunum stilleri ile yeniden kullanılmak üzere aynı Action örneğine izin veren menülere, araç çubuklarına vb. Bağlı olabilir. Hepsi oldukça basit MVVM şeyler!

İlgili konular