【问题标题】:WPF Prism send parameter back from idialog to viewWPF Prism 将参数从 idialog 发送回视图
【发布时间】:2021-09-20 10:30:42
【问题描述】:

我有一个视图,它打开一个包含数据网格的 idialog。我选择了某些行并将它们作为列表发送回视图,但我搜索的所有内容都发现 ResultButton 返回 idialog。如何发回自定义值,例如列表或其他任何内容?

我的 iDialog 视图模型:

public DelegateCommand<string> CloseCommand { get; set; }
    public DelegateCommand<string> AttachCommand { get; set; }

    private string _txtSearch;
    public string txtSearch
    {
        get { return _txtSearch; }
        set { SetProperty(ref _txtSearch, value); }
    }


    public List<GE_Drawing> SelectedDrawings { get; set; }

    private ObservableCollection<GE_Drawing> _DrawingList= new ObservableCollection<GE_Drawing>();
    public ObservableCollection<GE_Drawing> DrawingList
    {
        get { return _DrawingList; }
        set { SetProperty(ref _DrawingList, value); }
    }
    private bool _IsSelected;
    public bool IsSelected
    {
        get { return _IsSelected; }
        set { SetProperty(ref _IsSelected, value); }
    }
    public GE_DrawingAttachViewModel()
    {
        LoadList();
        CloseCommand = new DelegateCommand<string>(onClose);
        AttachCommand = new DelegateCommand<string>(onAttach);
       


    }



    private void onAttach(string parameter)
    {
        ButtonResult result = new ButtonResult();

        var records = DrawingList.Where(x => x.IsSelected == true).ToList();

        if(records.Count>0)
        {
            SelectedDrawings = records;
        }

        

        //result = ButtonResult.OK;
        //RaiseRequestClose(new DialogResult(result));
    }

    private void RaiseRequestClose(DialogResult dialogResult)
    {
        
        RequestClose?.Invoke(dialogResult);
    }

    private void onClose(string parameter)
    {
        ButtonResult result = new ButtonResult();
        result = ButtonResult.Cancel;
        RaiseRequestClose(new DialogResult(result));
    }

    private string _title="Drawing List";
    public string Title
    {
        get => _title; 
        set => SetProperty(ref _title, value); 
    }

    public event Action<IDialogResult> RequestClose;

    public bool CanCloseDialog()
    {
        return true;
    }

    public void OnDialogClosed()
    {
       
    }

    public void OnDialogOpened(IDialogParameters parameters)
    {
       
    }

    public async void LoadList()
    {
        GenericDataService<GE_Drawing> generic = new GenericDataService<GE_Drawing>();
        
       
        DrawingList.AddRange(await generic.GetAll());
      

    }
}

如上所述,我有一个 OnAttach,它应该将我的 SelectedDrawings 变量发送回视图,但我不知道该怎么做。

【问题讨论】:

  • 显示对话框的代码在哪里?特别是 - 您用来解析结果的回调是什么?

标签: c# wpf prism


【解决方案1】:

我找到了答案... IdialogResult 有一个带值的参数可以在对话框中设置,并使用一个键在回调中获取值。

private void openDialog()
    {
        DialogParameters parameter = new DialogParameters();
        _dialogService.ShowDialog("GE_DrawingAttach", parameter, r =>
        {
            if(r.Result==ButtonResult.OK)
            {

                DrawingList = r.Parameters.GetValue<List<GE_Drawing>>("DrawingList");
                
            }

        });
    }

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多