gpt4 book ai didi

c# - MVVM 模式 : an intermediate View between Command binding and ViewModel execute

转载 作者:行者123 更新时间:2023-12-03 10:35:51 25 4
gpt4 key购买 nike

场景
某些日期被加载到程序中(例如,对类(class)中的学生进行评估,其中每个学生都是具有他/她的评估数据的不同实体),并且它们的摘要显示在数据网格上。用户选择选择一些学生,并对他们的评价进行分析。分析过程需要一些参数,因此在分析之前会弹出一个窗口,让用户指定他喜欢的参数;然后执行分析过程。

实现总结
数据网格定义如下并绑定(bind)到 ViewModel:

<DataGrid x:Name="CachedSamplesDG" ItemsSource="{Binding cachedDataSummary}">                    
<DataGrid.Columns>
<DataGridTextColumn Header="name" Binding="{Binding name}"/>
<DataGridTextColumn Header="score" Binding="{Binding score}"/>
</DataGrid.Columns>
</DataGrid>

启动进程的按钮定义如下:
<Button x:Name="AnalysisBT" Content="Analyze" Command="{Binding AnalyzeCommand}" CommandParameter="{Binding ElementName=CachedSamplesDG, Path=SelectedItems}"/>

ViewModel 非常基础,总结如下:
internal class CachedDataSummaryViewModel
{
public CachedDataSummaryViewModel()
{
_cachedDataSummary = new ObservableCollection<CachedDataSummary>();
AnalyzeCommand = new SamplesAnalyzeCommand(this);
}


private ObservableCollection<CachedDataSummary> _cachedDataSummary;
public ObservableCollection<CachedDataSummary> cachedDataSummary { get { return _cachedDataSummary; } }


public ICommand AnalyzeCommand { get; private set; }
}

这是分析命令的定义:
internal class SamplesAnalyzeCommand : ICommand
{
public SamplesAnalyzeCommand(CachedDataSummaryViewModel viewModel)
{
_viewModel = viewModel;
}

private CachedDataSummaryViewModel _viewModel;

public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}

public bool CanExecute(object parameter)
{
// canExecute logic
}

public void Execute(object parameter)
{
// process mess ...
// Here I need the selected rows of datagird, which "parameter" delegates them.
// I also need some other parameters for analysis which user can set through another view
}
}

这是我当前流程的图表以及我接下来想做的事情

the diagram

问题
单击按钮时
  • 在 MainWindow
  • 上应用一些 UI 更改
  • 弹出进程选项窗口
  • 从 ProcessOptionsWindow
  • 获取设置参数
  • 将选定的数据网格行和用户指定的参数传递给 SamplesAnalyzeCommand

  • 实现这一要求的最佳方法是什么?

    最佳答案

    只需使用像 Good or bad practice for Dialogs in wpf with MVVM? 这样的对话服务.

    然后你可以在你的 ViewModel 中做这样的事情

     var result = this.uiDialogService.ShowDialog("Prozess Options Window", prozessOptionVM);

    ...
    var parameter1 = prozessOptionVM.Parameter1;

    关于c# - MVVM 模式 : an intermediate View between Command binding and ViewModel execute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941070/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com