WPF:

2010-06-17 12 views
8

'un arkasındaki koddaki komutlara bağlanma Bir WPF Microsoft Surface Uygulaması var ve MVVM-Pattern kullanıyorum. WPF:

Kodda oluşturulan bazı düğmeler var ve ben onlara komutlar bağlamak istiyorum fakat XAML böyle

çalıştığını nasıl sadece bilmek:

<Custom:SurfaceButton Command="{Binding SaveReservationCommandBinding, Mode=OneWay}"/> 

Ama ben Bunu yapamam çünkü düğmelerim XAML'de değil, sadece arkasındaki kodda var.

Peki, böyle bir komutun arkasında nasıl kod çalışır?

cevap

15

bir adlandırılmış sizin SurfaceButton için "SurfaceButton1" varsa ve komuta örneğine erişebilir varsayarsak, aşağıdaki kodu kullanabilirsiniz:

SurfaceButton1.Command = SaveReservationCommand; 
+1

+1. Ayrıca gerekirse kodlamada Binding kullanabilirsiniz (http://msdn.microsoft.com/en-us/magazine/cc700358.aspx#id0190003) – Anvaka

+2

Hızlı cevap için teşekkür ederiz. Bu kolay olacağını düşünmüyordu;) – sofri

+0

Bağlama, arkadaki kodda ayarlanmış olabilir, ancak uygulama OLMAMALIDIR ve bu kod yalnızca çalışırsa çalışacaktır. – David

3

ben tarafından gönderildi bağlantıdan kod aldı Anvaka şablon olarak. Ben Telerik RadMenuItem kullanıyorum, ama kesinlikle Command özelliğini açığa çıkaran başka bir bileşeni kullanabilirsiniz.

item = new RadMenuItem(); 
item.Header = "Hide Column"; 
DependencyProperty commProp = RadMenuItem.CommandProperty; 
if (!BindingOperations.IsDataBound(item, commProp)) { 
    Binding binding = new Binding("HideColumnCommand"); 
    BindingOperations.SetBinding(item, commProp, binding); 
} 
//this is optional, i found easier to pass the direct ref of the parameter instead of another binding (it would be a binding to ElementName). 
item.CommandParameter = headerlCell.Column; 
menu.Items.Add(item); 

... Umarım yardımcı olur ve bir şey net değilse, üzgünüm, bu benim ilk yazı :) Düğme Komutanlığı erişimi varsa

12

kabul cevap büyük çalışacaktır var. Bununla birlikte, MVVM'de bunlar genellikle ayrı tutulur (Görünüm-Modeldeki Düğme ve Görünüm Modeli). XAML'de normalde onu bağlamak için bir veri bağlama kullanırsınız (sorudaki örnekte olduğu gibi).

Dinamik düğmem Komutu bulamadığında programım bana bir hata verdi (çünkü tamamen farklı bir ad alanındaydı). Doğru yanıt için şu şekilde çözdüm:

SurfaceButton.SetBinding (Button.CommandProperty, new Binding("SaveReservationCommand"));