Призма WPF отправляет параметр обратно из идиалога для просмотра

#c# #wpf #prism

Вопрос:

У меня есть представление, которое открывает идиалог, содержащий сетку данных. Я выбираю определенные строки и отправляю их обратно в виде списка в представление, но все, что я ищу, я только что нашел, возвращает результат для идиалога. Как я могу отправить обратно пользовательское значение, например список или что-то еще ?

Моя модель представления идиалога :

 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 в представление, но я не знаю, как это сделать.

Комментарии:

1. Где код, который показывает диалоговое окно? В частности, какой обратный вызов вы используете для анализа результата?

Ответ №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");
                
            }

        });
    }