gpt4 book ai didi

silverlight - ViewModel责任并在Silverlight中弹出一个子窗口

转载 作者:行者123 更新时间:2023-12-03 11:00:48 24 4
gpt4 key购买 nike

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

每行中的datagrid中的按钮

<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,并在 View 模型上使用这样的命令








数据网格中的按钮
 <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}">

在 View 模型中
this._editBidAgentRequest = new InteractionRequest<BidAgentEditViewModel>();

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

和命令处理程序
 private void editBidAgent(BidAgentDto bidAgent)
{
_editBidAgentRequest.Raise(newBidAgentEditViewModel(bidAgent,_bidAgentDataService));
}

因此,view会调用 View 模型上的命令,该模型会转过来并引发交互请求,该交互请求随后将由该 View 处理,并弹出子窗口。也许我不了解MVVM,但这似乎是处理用户交互的过于复杂的方法。再加上我在 View 模型上有一个称为“交互”的事实,这让我感到很脏。您怎么看,有没有更好的方法来执行此操作而不必在 View 模型上声明这些交互请求,而这完全是在xaml中完成的,而不必在 View 模型中处理?

从后面的代码首先了解发生了什么:

最佳答案

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

此外,您可以保持View整洁且没有任何代码隐藏(否则几乎无法测试),此外,您还可以利用Silverlight的优势来发挥自己的优势。

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

关于silverlight - ViewModel责任并在Silverlight中弹出一个子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520073/

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