Как вы передаете параметры из xaml? - PullRequest
30 голосов
/ 26 января 2011

Я создал свой собственный UserControl ClockControl, который я инициализирую через XAML главного окна.

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

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

<myControl:ClockControl></myControl:ClockControl>

Но как я могу передать параметр, делающий это?

Здесьэто конструктор:

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

Заранее спасибо.

Ответы [ 4 ]

61 голосов
/ 26 января 2011

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

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}" />

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

4 голосов
/ 26 января 2011

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

Прочтите следующее в отношении DependencyProperty's:

В качестве наглядного представления, что этопозвольте вам сделать следующее, а затем использовать его в коде позади:

<myControl:ClockControl City="New York"></myControl:ClockControl>
1 голос
/ 28 ноября 2016

x: директива Arguments будет то, что вам нужно.

0 голосов
/ 18 августа 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...