开发者

How do you pass parameters from xaml?

开发者 https://www.devze.com 2023-02-06 14:52 出处:网络
I have created my own UserControl \"ClockControl\", which I initialize through the main window\'s XAML.

I have created my own UserControl "ClockControl", which I initialize through the main window's XAML.

The only problem is that I have to pass a parameter to the constructor of the clock control, and I have no clue of I how I can do that.

This works if I have no parame开发者_JS百科ters:

<myControl:ClockControl></myControl:ClockControl>

But how can I pass a parameter doing this?

Here is the constructor:

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

Thanks in advance.


Your constructor:

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

First of all, if you want to use ClockControl from XAML, then you need a default constructor, means a constructor which doesn't take any parameter. So the above constructor is not going to work.

I would suggest you to define a property with name City, preferably dependency property, and then use it from XAML. Something like this:

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

Then you can write this in XAML:

<myControl:ClockControl City="Hyderabad" />

Since City is a dependency property, that means you can even do Binding like this:

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

Hope, that solves your problem!


This is done with the use of DependencyProperty's, however not via the constructor. Just by adding properties to the control itself and using them from the code-behind.

Have a read of the following in regards to DependencyProperty's:

  • Dependency Properties Overview
  • DependencyProperty Class MSDN
  • Why Dependency Properties?

As a visual note, what this will allow you to do is the following, and then use it in the code-behind:

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


x:Arguments directive would be what you need.


Could simplify this by simply binding the Tag property of the control. Quick and dirty, and perhaps not overly elegant, but saves times adding another property.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号