1

ストックと言うUserControlがあり、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 を必要とする操作ではありません。

ViewModel コマンドの代わりに、xaml のコード ビハインドでボタンの OnClick を単に処理することを検討してください。

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 内に作成されます。

于 2012-04-27T16:59:57.450 に答える