如何使用CommandParameter传递UserControl?

7

我正在使用DelegateCommand,想要在命令中传递UserControl。

#region OpenViewCommand
private DelegateCommand<UserControl> _openViewCommand;
public ICommand OpenViewCommand
{
    get
    {
        if (_openViewCommand == null)
            _openViewCommand = new DelegateCommand<UserControl>(new Action<UserControl>(OpenView));
        return _openViewCommand;
    }
}

public void OpenView(UserControl ViewName)
{
    UserControl ctrl = (UserControl)ViewName;
    JIMS.Controls.Message.Show(ViewName.ToString());
}
#endregion

XAML中的命令

<Button Name="btnStockGroups" Command="{Binding OpenViewCommand}" CommandParameter="JIMS.View.Stock.StockGroups">stock group</Button>

为什么您需要在 ViewModel 中访问控件?通常的 MVVM 方法是将控件绑定到 ViewModel,并从绑定的属性中读取数据。 - Dan Busha
OpenView命令旨在实例化特定类型的用户控件并显示给用户吗? - Andrew
1个回答

13
如果给您的用户控件添加一个x:Name属性(例如"MyView"),那么您应该能够像这样做:
<Button Name="btnStockGroups" 
        Command="{Binding OpenViewCommand}" 
        CommandParameter="{Binding ElementName=MyView}">

该元素不在窗口中,而是一个UserControl文件。 - Kishore Kumar
1
你如何在不命名元素的情况下完成它? - Alex Hope O'Connor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接