这是我的问题的流程:

  • 用户单击“保存”按钮
  • 出现“另存为”对话框,用于选择目标路径
  • 执行“保存”按钮的单击事件的RelayCommand

  • 目前,我对以下方面还一无所知:
  • 如何打开对话框并使用EventToCommand绑定(bind)
  • 执行RelayCommand
  • 如何将“另存为”对话框的选定路径传递到RelayCommand


  • 我正在使用MVVM Light库。

    最佳答案

    虽然我认为Dmitriy Reznik的回答相当不错,但另一个解决方案是使用按钮的命令来执行ViewModel中的大部分工作。这并不严格遵循MVVM模式,但可能更易于实现。

    将按钮上的命令设置为ViewModel上的ICommand。一旦关闭对话框,ICommand将启动SaveFileDialog并将文件写入磁盘。由于您使用的是MVVM Light,因此我将使用RelayCommand来实现ICommand。

    Xml:

    <Button Command="{Binding SaveAsClickCmd}/>
    

    代码:
    public class MyViewModel
    {
        public RelayCommand SaveAsClickCmd
        {
            get {
                return _saveAsClickCmd ?? (_saveAsClickCmd = new RelayCommand(() => {
                    var dialog = new Microsoft.Win32.SaveFileDialog();
                    if (dialog.ShowDialog() != true)
                        return;
                    using (var stream = dialog.OpenFile()) {
                        //write out file to disk
                    }
                }));
            }
        }
    
        private RelayCommand _saveAsClickCmd;
    }
    

    关于c# - 如何将SaveAsDialog的结果传递给RelayCommand?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10077907/

    10-12 01:24