如何从xaml向构造函数传递值?

时间:2014-03-31 03:22:53

标签: c# xaml windows-phone-8 windows-phone

我想在初始化新的UserControl

时正确分配值
public partial class MyUserControl : UserControl
{
    public MyUserControl(int id)
    {
        InitializeComponent();

        //.. do something with id
    }

    // ...
}

是否可以从xaml将值传递给构造函数(在我的情况下为id)?

<CustomControls:MyUserControl />

(是的,我可以定义依赖属性或在代码中进行控制,但这不会有帮助)

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。您可以以编程方式创建用户控件。然后,您可以使用任何您想要的构造函数。这是一个样本:

假设我们有一个usercontrol,它在初始化时为文本框赋值:

  public ControlWithP(int i)
        {
            InitializeComponent();
            tb.Text = i.ToString();
        }

将此控件添加到页面:

 public SamplePage()
        {
            InitializeComponent();
            ControlWithP cwp = new ControlWithP(1);
            this.sp.Children.Add(cwp);
        }

其中sp是StackPanel控件。将用户控件添加到Grid也是一样。

查看结果。

这是你想要的吗?

答案 1 :(得分:0)

从XAML-2009开始,您可以使用x:Arguments Directive 执行此操作,但 Windows Phone正在使用2006(暂时),因此无法实现。

因此,要使用XAML中的控件,您需要一个默认的构造函数(无参数)。

我认为你可以使用一些解决方法,使用特别设计的属性:

public partial class MyControl : UserControl
{
    private string myValue = "Default";
    public string MyValue
    {
        get { return myValue; }
        set
        {
            myValue = value;
            // alternatively you can add some code here which 
            // will be invoked after control is created
        }
    }

    public MyControl()
    {
        InitializeComponent();
    }
}

然后在XAML中:

<local:MyControl MyValue="From xaml"/>

在创建控件之后,设置属性并调用其代码 - 因此它也可以用作创建期间运行的代码的附加部分。

如果您想将数据传递给您的控件,更好的选择是DependencyProperty - example here