Передача параметров между окном xaml и usercontrol WPF
как передать параметры из окна xaml в конструктор WPF usercontrol? Я попытался создать свойство зависимости, но это не удалось сделать. Должен ли я попробовать расширения xaml или есть другой способ сделать это?
<local:Myusercontrol Param1="user1"/>
в XAML.cs призвания Window
, ну его usercontrol.
public partial class SomeView : UserControl
{
SomeViewModel vm = new SomeViewModel();
public SomeView()
{
this.DataContext = vm;
InitializeComponent;
}
}
InitializeComponent
вышеуказанного окна очищает значение свойства зависимостей, заданного через xaml перед созданием экземпляра пользовательского элемента управления и, следовательно, значение свойства depencency всегда имеет значение null.
и xaml usercontrol.cs
Myusercontrol : UserControl
{
public Myusercontrol (string User)
{
InitializeComponent();
UserControlViewModel vm = new UserControlViewModel (User);
this.DataContext = vm;
}
обратите внимание, что я использую шаблон MVVM.
3 ответов
XAML не может использовать конструктор с параметром. Сохраните то, что вы пробовали с свойством зависимостей:
<local:Myusercontrol Param1="user1"/>
затем вы можете попробовать это в конструкторе :
public Myusercontrol()
{
InitializeComponent();
Loaded += (sender, args) =>
{
UserControlViewModel vm = new UserControlViewModel(Param1);
this.DataContext = vm;
};
}
вы передаете параметр в пользовательский элемент управления из XAML, который не будет работать. Потому что при вызове пользовательского элемента управления из XAML он вызовет конструктор по умолчанию пользовательского элемента управления. В вашем случае вы не создали конструктор без параметров. Другой с параметром Myusercontrol (string User)
никогда не будет вызван.
самый лучший вариант-это только конструктор paramterless для контроля пользователей и ничего более.
public Myusercontrol()
{
InitializeComponent();
}
Так как вы используете MVVM для ваш пользовательский элемент управления, вы должны использовать MVVM для окна, в котором размещается пользовательский элемент управления - так просто:)
там вы должны создать свойство для UserControlViewModel
и создать его экземпляр. Если вы это сделаете, вам будет проще привязать Datacontext вашего пользовательского элемента управления к его ViewModel.
Если ваш пользовательский элемент управления будет использоваться во многих местах, я рекомендую har07 ответить и использовать свойство зависимостей. Но если элемент управления будет использоваться только один или два раза, и вы достаточно ленивы, чтобы создать свойство зависимостей, вы всегда можете создать элемент управления из кода. Например, создайте сетку как родительскую и вставьте элемент управления как дочерний элемент вашей сетки
XAML
<Grid Name="Wrapper"></Grid>
код
MyUserControl userControl = new MyUserControl(param);
Wrapper.Children.Add(userControl);