2011-01-26 15 views
28

Stworzyłem własny "Sterownik" UserControl, który inicjuję poprzez XAML okna głównego.W jaki sposób przekazujesz parametry z xaml?

Jedynym problemem jest to, że muszę przekazać parametr do konstruktora kontroli zegara i nie mam pojęcia, jak to zrobić.

To działa, jeśli nie mam parametry:

<myControl:ClockControl></myControl:ClockControl> 

Ale w jaki sposób można przekazać parametr ten sposób?

Oto konstruktor:

public ClockControl(String city) 
    { 
     InitializeComponent(); 
     this.initController(); 
     ...... 
     ..... 
    } 

góry dzięki.

+0

pytanie podobne http: // stackoverflow.com/questions/1083159/calling-a-parameterized-constructor-from-xaml –

Odpowiedz

58

konstruktora:

public ClockControl(String city) 
{ 
    InitializeComponent(); 
    this.initController(); 
    //... 
} 

Przede wszystkim, jeśli chcesz używać ClockControl z XAML, to trzeba domyślny konstruktor, konstruktor, który oznacza nie ponosi parametr. Tak więc powyższy konstruktor nie będzie działał.

Proponuję zdefiniować właściwość o nazwie City, najlepiej w zależności od właściwości, a następnie użyć jej z XAML. Coś takiego:

public class ClockControl: UserControl 
    { 
     public static readonly DependencyProperty CityProperty = DependencyProperty.Register 
      (
       "City", 
       typeof(string), 
       typeof(ClockControl), 
       new PropertyMetadata(string.Empty) 
      ); 

     public string City 
     { 
      get { return (string)GetValue(CityProperty); } 
      set { SetValue(CityProperty, value); } 
     } 

     public ClockControl() 
     { 
      InitializeComponent(); 
     } 
     //.......... 
} 

Następnie można napisać to w XAML:

<myControl:ClockControl City="Hyderabad" /> 

Od City jest właściwość zależność, co oznacza, że ​​można nawet zrobić Binding tak:

<myControl:ClockControl City="{Binding Location}" /> 

Hope, która rozwiązuje twój problem!

+0

Dzięki! Świetny przykład. – Ikky

+0

Nareszcie! Ktoś wie, czego chciałem ...! –

+0

@Nawaz, to, czego chce Jan i czego potrzebuje Jan, może być takie same lub nie. Lepszym rozwiązaniem może być użycie [innego obejścia] (http://stackoverflow.com/a/40901014/2712726), ponieważ mamy teraz atrybut 'x: Reference' w XAML. Czy mógłbyś recenzować? Właściwe przekazywanie parametrów konstruktora nie jest jeszcze dostępne w XAML, o ile wiem. –

4

Dokonuje się tego przy użyciu DependencyProperty, jednak nie za pośrednictwem konstruktora. Wystarczy, że dodasz właściwości do samej kontrolki i użyjesz ich z kodu źródłowego.

Mają odczytu z następujących czynności w odniesieniu do DependencyProperty to:

jako wizualne notatki, co pozwoli Ci zrobić jest wykonaj następujące czynności, a następnie użyj go w polu kodowym:

<myControl:ClockControl City="New York"></myControl:ClockControl> 
+0

Dzięki, zajrzę do tego – Ikky

+1

Korzystanie z właściwości w konstruktorze? Kiedy zostanie ustawiona wartość "Nowy Jork"? – Snowbear

+0

@Snowbear - To wcale nie jest to, co powiedziałem. Czy twój głos był spadkiem? –

0

Można to uprościć, po prostu wiążąc właściwość Tag kontrolki. Szybko i brudno, a może nie za bardzo elegancko, ale oszczędza czas dodając kolejną nieruchomość.

Powiązane problemy