簡體   English   中英

C#和WPF,當使用mvvm樣式以及將按鈕動作用作帶有commandparameter的命令時,如何始終在commandparameter中創建一個新對象?

[英]C# and WPF, when using mvvm style, and button action as command with commandparameter, how to ALWAYS create a new object in commandparameter?

這是MainWindow的xaml wpf:

<Button
                    x:Name="Add_Button"
                    Content="Add Item"
                    VerticalAlignment="Center"
                    Style="{StaticResource ResourceKey=ActionButtonStyle}"
                    Command="{Binding openAddDialogCommand}">
                    <Button.CommandParameter>
                        <local:MyDialog />
                    </Button.CommandParameter>
                </Button>

在這里, MainWindow已經有一個帶有ViewModel的上下文。 openAddDialogCommand是打開它的命令。 參數本身將作為IDialogService而不是對話框本身傳遞。

現在的問題是, MyDialog是一個窗口,當我關閉它時,除非它是一個新實例,否則無法重新打開該窗口。 如何始終將新實例作為參數返回? 我嘗試在MainWindow類中使用一個變量,該變量始終在其getter中生成一個新對象,然后使用對按鈕的綁定,除非我提高了更改的屬性(這太復雜了,並且我不想),否則它根本不起作用向MainWindow類添加更多代碼。 有沒有簡單的方法可以做到這一點?

您可以處理click事件並以編程方式創建MyDialog的新實例,而不使用命令參數:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var viewModel = DataContext as viewModel:
    viewModel.openAddDialogCommand.Execute(new MyDialog());
}

這只是從完全相同的視圖調用相同的命令,但是使用諸如C#的編程語言而不是使用諸如XAML的標記語言來執行此操作更加靈活。

MVVM並不是要從視圖中消除代碼,而主要是要分離關注點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM