1

我有一个 UserControl 说 Stock,它有一个 Button 叫做 Display

<Button Command="{Binding DisplayCommand}" CommandParameter="StockGroups">Display</Button>

现在,当我单击此按钮时,它应该将另一个名为 Display 的 UserControl 添加到位于 HomeWindow 中的 Canvas 中,并且应该将 CommandParameter 传递给 Display userControl。

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;
    }            
}
4

2 回答 2

2

另一种更接近 MVVM 的方法是拥有一个名为 的布尔属性ShouldDisplayControl,然后将其绑定到控件的属性Visibility(使用 [BooleanToVisibilityConverter]) 1),同时将也必然。CommandParameterControlParameter

于 2012-04-27T17:25:15.883 回答
0

这不是一个应该涉及 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" />

这应该可以满足您的需求,而无需在视图模型中创建和调用命令。单击的按钮的名称将设置为用户控件中的指定属性,并且将在 Canvas 中创建控件的实例。

于 2012-04-27T16:59:57.450 回答