通过 WPF 中 ViewModel 中的命令将 UserControl 添加到画布
本文关键字:添加 UserControl 命令 WPF ViewModel 通过 | 更新日期: 2023-09-27 18:32:32
我有一个用户控件说股票,它有一个名为显示的按钮
<Button Command="{Binding DisplayCommand}" CommandParameter="StockGroups">Display</Button>
现在,当我单击此按钮时,它应该将另一个名为"显示"的用户控件添加到位于主窗口中的画布中,并应将命令参数传递给显示用户控件。
private DelegateCommand<string> _displayCommand;
public virtual void DisplayExecuted(string param){}
public ICommand DisplayCommand
{
get
{
if (_displayCommand == null)
_displayCommand = new DelegateCommand<string>(new Action<string>(DisplayExecuted));
return _displayCommand;
}
}
另一种更像 MVVM 的方法是拥有一个名为 ShouldDisplayControl
的布尔属性,然后将其绑定到控件的 Visibility
属性(使用 [BooleanToVisibilityConverter]) 1),同时将CommandParameter
作为第二个属性(可能是 ControlParameter
,控件也绑定到该属性
这不是一个应该涉及 ViewModel 的操作,因为它不操作任何模型数据。
请考虑仅在 xaml 的代码隐藏中处理按钮的 OnClick 而不是 ViewModel 命令。
在 HomeWindow.xaml.cs 文件中:
protected override void Display_OnClick(object sender, EventArgs e) {
var buttonName = ((Button)sender).Name; // gets the name of the button that triggered this event
var displayControl = new DisplayControl(); // your user control
displayControl.param = buttonName; // set the desired property on your display control to the name of the button that was clicked
((Canvas)Content).Children.Add(displayControl); // 'Content' is your Canvas element
}
在您的 HomeWindow.xaml 文件中:
<Button x:Name="StockGroups" Click="Display_OnClick" Text="Display" />
这应该可以得到你想要的,而无需在视图模型中创建和调用命令。单击的按钮的名称将设置为 userControl 中的指定属性,并将在 Canvas 中创建控件的实例。