gpt4 book ai didi

silverlight-4.0 - ShowDialog 带有 MVVMLight 的 RadWindow

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

我有一个带有 RadWindow(本质上是 ChildWindow)的功能性 MVVM 模式 SL 应用程序,我想在我的 View 中删除使用其 ShowDialog 显示窗口的代码隐藏。如果有帮助的话,主视图和窗口都绑定(bind)到同一个 ViewModel。

该按钮具有使用 MVVMLight RelayCommand 处理设置状态的 ViewModel 命令以及 View 中的事件处理程序。

最终的解决方案/模式将被重用 20 多次,因此比代码隐藏更好的东西会很棒。

想法?

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
var window = new RadWindowTest.Controls.ChildWindow1();

window.Closed += new System.EventHandler<Telerik.Windows.Controls.WindowClosedEventArgs>(window_Closed);

window.ShowDialog();

}

最佳答案

在这种情况下,我建议您实现 DialogService .您可以将此服务注入(inject)到您的 View 模型中,为了进行测试,您必须注入(inject)一个不依赖于 View 的实例,从而保持可测试性。您可以使用 ViewModelLocator 使该服务可用于您的应用程序。

另一种方法是实现一个 ViewBase 类,该类实现一个允许您显示对话框的接口(interface)。 ViewModel 现在使用这个接口(interface)来显示一个对话框。再次测试您需要提供不同的接口(interface)实现。可以找到样本 here .

这两个想法都围绕着相同的概念,即分解显示对话框的功能。为了严格解耦 View 和 ViewModel,您必须考虑 ViewModel 如何指定必须删除哪个对话框,以及如何将对话结果或对话模型返回给调用 ViewModel。

哪种方法更好取决于您的判断。我个人更喜欢第一种方法,因为我不必从公共(public)基类继承 View 。

PS:使用命令到达 ViewModel 中要显示对话框的位置。使用对话服务应该不需要任何代码。

关于silverlight-4.0 - ShowDialog 带有 MVVMLight 的 RadWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509739/

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