繁体   English   中英

在xaml窗口和usercontrol WPF之间传递参数

[英]Passing Parameters between xaml window and usercontrol WPF

如何将参数从xaml窗口传递给WPF usercontrol构造函数? 我已经尝试创建依赖属性,但它无法做到。 我应该尝试xaml扩展还是有其他方法可以做到这一点?

<local:Myusercontrol Param1="user1"/>

调用Window xaml.cs,以及它的用户控件。

public partial class SomeView : UserControl
{
    SomeViewModel vm = new SomeViewModel();
    public SomeView()
    {
        this.DataContext = vm;
        InitializeComponent;
    }
}

上面窗口的InitializeComponent在创建用户控件的实例之前清除通过xaml设置的依赖项属性的值,因此depencency属性的值始终为null。

和usercontrol的xaml.cs

Myusercontrol : UserControl
{
  public Myusercontrol (string User)
  {
    InitializeComponent();
    UserControlViewModel vm = new UserControlViewModel (User);
    this.DataContext = vm;
  }

请注意,我使用的是MVVM模式。

XAML不能使用带参数的构造函数。 使用依赖属性保留您尝试过的内容:

<local:Myusercontrol Param1="user1"/>

那么你可以在构造函数中尝试这个:

public Myusercontrol()
{
    InitializeComponent();
    Loaded += (sender, args) =>
          {
                UserControlViewModel vm = new UserControlViewModel(Param1);
                this.DataContext = vm;
          };
}

您正在从XAML将参数传递给用户控件,这将无法正常工作。 因为如果从XAML调用用户控件,它将调用用户控件的默认构造函数。 在你的情况下,你没有创建任何无参数的构造函数。 带参数Myusercontrol (string User)的另一个将永远不会被调用。

最好的选择是只为用户控件提供无参数构造函数,仅此而已。

public Myusercontrol()
{
    InitializeComponent();
}

由于您使用MVVM进行用户控制,因此您应该将MVVM用于托管用户控件的窗口 - 就像那样简单:)

在那里,您应该为UserControlViewModel创建一个属性并创建其实例。 如果这样做,您将更容易将用户控件的Datacontext绑定到其ViewModel。

如果您的用户控件将在许多地方使用,我建议使用har07答案并使用依赖属性。 但是如果您的控件只使用一次或两次并且您懒得创建依赖项属性,则始终可以从代码创建控件。 例如,将网格创建为父级,并将控件作为网格的子级插入

XAML

<Grid Name="Wrapper"></Grid>

MyUserControl userControl = new MyUserControl(param);
Wrapper.Children.Add(userControl);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM