2011-01-26 4 views
28

Я создал свой собственный UserControl «ClockControl», который я инициализирую через XAML главного окна.Как передать параметры из xaml?

Единственная проблема заключается в том, что мне нужно передать параметр конструктору управления часами, и я не знаю, как я могу это сделать.

Это работает, если у меня нет параметров:

<myControl:ClockControl></myControl:ClockControl> 

Но как я могу передать параметр делает это?

Вот конструктор:

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

Спасибо заранее.

+0

вопрос аналогичный http: // stackoverflow.com/questions/1083159/call-a-parameterized-constructor-from-xaml –

ответ

58

Ваш конструктор:

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

Прежде всего, если вы хотите использовать ClockControl из XAML, то вам необходим конструктор по умолчанию, означает конструктор, который не принимает какой-либо параметра. Таким образом, вышеупомянутый конструктор не будет работать.

Я предлагаю вам определить свойство с именем City, предпочтительно свойство зависимости, а затем использовать его из XAML. Что-то вроде этого:

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(); 
     } 
     //.......... 
} 

Тогда вы можете написать это в XAML:

<myControl:ClockControl City="Hyderabad" /> 

Поскольку City свойство зависимостей, это означает, что вы можете даже сделать Binding так:

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

Надеюсь, это решает вашу проблему!

+0

Отличный пример. – Ikky

+0

Наконец-то! Кто-то знает, чего я хотел ...! –

+0

@ Наваз, что хочет Джон, и то, что нужно Джону, может или не может быть одинаковым. Возможно, лучше использовать [другое обходное решение] (http://stackoverflow.com/a/40901014/2712726), потому что теперь у нас есть атрибут «x: Reference» в XAML. Не могли бы вы пересмотреть? Насколько мне известно, правильная передача параметров конструктора пока недоступна в XAML. –

4

Это делается с использованием DependencyProperty, но не через конструктор. Просто добавив свойства к самому управлению и используя их из кода.

Есть прочитанный из следующих действий в отношении к DependencyProperty'S:

Как визуальной ноте, что это позволит вам сделать это затем, а затем использовать его в коде:

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

Спасибо, я посмотрю, что – Ikky

+1

Использование свойства в конструкторе? Когда будет установлено значение «Нью-Йорк»? – Snowbear

+0

@Snowbear - Это совсем не то, что я сказал. Был ли ваш голос пониженным? –

0

Могло бы упростить это, просто привязав свойство тега элемента управления. Быстрая и грязная, и, возможно, не слишком элегантная, но экономит время, добавляя еще одно свойство.

Смежные вопросы