2014-09-18 15 views
9

Bir Xamarin.Forms.Button ürününü, Command ürününe ViewModel ürününe CommandParameter olarak aktarmak istiyorum. Bunu, kodun arkasındaki koddan nasıl elde edeceğimi biliyorum. ...Düğmeyi Xamarin.Forms Sayfasında XAML'den CommandParameter olarak nasıl geçiririm?

XAMLViewModel

<Button x:Name="myButton" 
    Text="My Button" 
    Command="{Binding ButtonClickCommand}"/> 

XAML.cs

public partial class MyTestPage 
{ 
    public MyTestPage() 
    { 
     InitializeComponent(); 

     myButton.CommandParameter = myButton; 
    } 
} 

(çoğu özellikleri kısalık için kaçırmış ile)

public class MyViewModel : ViewModelBase 
{ 
    public MyViewModel() 
    { 
     ButtonClickCommand = new Command(
      (parameter) => 
      { 
       var view = parameter as Xamarin.Forms.Button; 
       if (view != null) 
       { 
        // Do Stuff 
       } 
      }); 
    } 

    public ICommand ButtonClickCommand { get; private set; } 
} 

... AMA, XAML'nin kendisinde CommandParameter bildirmek mümkün mü? Başka bir deyişle, parametreyi düğmenin kendisine ayarlayan bağdaştırma sözdizimi nedir?

btw Zaten CommandParameter="{Binding RelativeSource={RelativeSource Self}}" denedim ve bu çalışmadı.

sayesinde

+0

VM'nizde neden düğmeye ihtiyacınız var? –

+0

Merhaba @AlexAnderson. Evet, ben de bu konuda çok istekli değilim. Xamarin.Forms'u mevcut bir Xamarin iOS projesine dahil ediyoruz. Sadece bir Xamarin.Form Sayfasından gösterilecek yerli bir UIPopoverController almanın yollarını deneyebilirsiniz. Popuplar için Forms desteği yoktur, bu yüzden şu anda etrafındaki yollara bakmak ve engellerden biri olan pop-up'ı gösteren UIElement'i bilmek zorundayım. Dediğim gibi ... hokey gibi hissediyor. Aşağıda önerilerinizi deneyeceğim. Teşekkürler –

+0

Pop-up'lar için 'ContentPage.DisplayActionSheet (...)' uygulamasına göz atın; eğer eylem sayfası yeterli değilse, onu gösteren kodu tersine mühendislik uygulayabilirsiniz. Düğme referansının alınması yine de bundan UIButton referansını bulmayı gerektirecektir. Özel oluşturucu –

cevap

-1
<Button x:Name="myButton" 
    Text="My Button" 
    Command="{Binding ButtonClickCommand}" 
    CommandParameter={Binding RelativeSource= 
           {RelativeSource 
           Mode=FindAncestor, 
           AncestorType={x:Type Button}}/> 

çalışması gerekir, ama yine de zararına im Düğmeye neden ihtiyaç? MVVM'nin noktası Veri ve UI'yi ayırmaktır. Düğmeye yapmanız gereken her şey DataBindings üzerinden yapılabilir.

yukarıdaki çalışmıyor, denemek için diğer tek şey düğmesine bir x vermek ise: Anahtarı ve CommandParamter = {StaticResource x: Key '}

+1

'Xamarin.Forms' bağlamaları herhangi bir RelativeSource' özelliği veya bir" RelativeSource "biçimlendirme uzantısına sahip değil. –

+0

Merhaba @AlexAnderson ... evet bu önerilerin ikisi de korktum. –

16

Xamarin.Forms yok sadece bir referans biçimlendirme uzantısı var :

<Button x:Name="myButton" 
    Text="My Button" 
    Command="{Binding ButtonClickCommand}" 
    CommandParameter="{x:Reference myButton}"/> 

, bu şimdiye bu ihtiyacı görüyorum ilk kez ve muhtemelen daha iyi ViewModels adresinin Görüntüleme ayırmak ve daha temiz bir desen kullanarak bu çözmek veya değil tarafından bir komut paylaşımı rağmen düğmeler arasında.

+0

Merhaba @ StephaneDelcroix. Ne yazık ki bu işe yaramadı .. "İstisna bir hedefin hedefi ile istisna edildi." –

+0

Yığın izini paylaşabilir misiniz?xaml 2009 xmlns kullanıyor musunuz? XF'nin en son (1.2.2 veya 1.2.3-pre2) sürümünü mi kullanıyorsunuz? –

+0

Üzgünüm @GavinSutherland, ancak bunu sadece 1.2.3-öncesi-2'de test ettim ve beklendiği gibi çalışıyor. –

İlgili konular