通过 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;
    }            
}

通过 WPF 中 ViewModel 中的命令将 UserControl 添加到画布

另一种更像 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 中创建控件的实例。