【问题标题】:ViewModel responsibility and poping up a child window in SilverlightViewModel 职责和在 Silverlight 中弹出子窗口
【发布时间】:2010-12-23 15:27:16
【问题描述】:

从哪里开始?问题是关于实现同一件事的两种不同方法,而且对我来说都很有味道,所以我需要有人告诉我是否有更好的方法。因此,我们有一个在数据网格中显示数据的屏幕。当用户单击数据网格中的图标时,会显示一个模式弹出窗口(来自 Prism)。据我所知,这可以通过两种方式完成,与 SL 一起工作 2 周。 为了提供更多背景知识,我们使用 MVVM 模式,并且我们有一个 ViewModelLocator。

每行数据网格中的按钮

<Button Width="16" Name="cmdEdit" Height="16" Margin="10,0,0,0" Style="{StaticResource ImageButtonStyle}" Click="cmdEdit_Click" CommandParameter="{Binding}">
         <Button.Content>
             <Image  Source="/Test.Application.Bid;component/Images/edit.png"/>
          </Button.Content>
</Button>

第一种方式,处理来自后面代码的点击:

var p = new PopupChildWindowAction();
 var vml = new ViewModelLocator();
 var viewModel = vml["BidAgentEditView"] as BidAgentEditViewModel;
 var view = new BidAgentEditView();
 view.DataContext = viewModel;
 viewModel.BidAgent = ((Button) e.OriginalSource).CommandParameter as BidAgentDto;
 p.ChildWindow = view;
 p.ChildWindow.Show();

第二种方法是在xaml中使用InteractionRequestTriggers,以及像这样的视图模型上的命令

数据网格中的按钮

 <Button Width="16" Height="16" Margin="10,0,0,0" Style="{StaticResource ImageButtonStyle}" 
         prism:Click.Command="{Binding Source={StaticResource cc}, Path=DataContext.EditBidAgentCommand}" 
         prism:Click.CommandParameter="{Binding}">

在视图模型中

this._editBidAgentRequest = new InteractionRequest<BidAgentEditViewModel>();

EditBidAgentCommand = new DelegateCommand<BidAgentDto>(editBidAgent, canEditBidAgent);

命令处理程序

 private void editBidAgent(BidAgentDto bidAgent)
 {
     _editBidAgentRequest.Raise(newBidAgentEditViewModel(bidAgent,_bidAgentDataService));
  }

因此视图调用视图模型上的命令,该命令转身并引发交互请求,然后由视图处理并弹出子窗口。也许我不了解 MVVM,但这似乎是处理用户交互的过于复杂的方式。再加上我在视图模型上有一些叫做“交互”的东西让我觉得很脏。您认为,有没有更好的方法来做到这一点,而不必在视图模型上声明这些交互请求,完全在 xaml 中完成,而无需在视图模型中处理?

先从后面的代码来把握是怎么回事:

【问题讨论】:

    标签: silverlight mvvm prism


    【解决方案1】:

    您可能知道,Prism proposes interaction requests 适用于这种情况。请记住,VM 必须处理视图的业务逻辑部分。命令在操作发生时显示弹出窗口是 VM 职责的一部分。

    此外,您可以保持视图干净且没有任何代码隐藏(否则几乎无法测试),此外,您还可以利用 Silverlight 的优势。

    总结起来,交互请求对我来说似乎很简洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2013-03-16
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多