如何使用 Silverlight 和 MVVM 设计复合视图和视图模型?

2024-02-07

我想在我的 Silverlight MVVM 应用程序中创建一个“向导”。该向导应包含多个步骤,您可以使用“下一个”和“上一个”在这些步骤之间导航。 我面临的问题是视图和视图模型之间的关系。 我希望向导本身有一个视图和视图模型。我的直觉告诉我,向导中的每个步骤都应该有一个视图/视图模型对。

在一个视图模型包含多个其他视图模型并且该视图实际上由几个较小的视图组成的情况下,维护此类关系的好方法是什么? 有什么我可以使用的模式或实践吗?

我知道这个问题可能是主观的,但是给我一个粗略的方法,我会给你一个答案!


我建议主向导 viewModel 它有一个集合steps查看模型并处理它们之间的导航。导航时应调用验证方法step视图模型:

向导虚拟机:

public class WizardVM
{
     // this commands should support CanExecute
     public ICommand GotoNextCommand { get; private set; } // should open next step VM
     public ICommand GotoBackCommand { get; private set; } // should open previous step VM

     // this prop should be set by 'GotoNext', 'GotoBack' commands
     public object CurrentStep { get; private set; }

     // probably internally you will have a list of all steps:
     private ICollection<object> _stepViewModels = ...;
}

向导视图:

<StackPanel>
    <ContentPresenter Content="{Binding CurrentStep}">
    <StackPanel Orientation="Horizontal">
        <Button Command="{Binding GotoBackCommand}">Back</Button>
        <Button Command="{Binding GotoNextCommand}">Next</Button>
    </StackPanel>
</StackPanel>

UPDATE:

视图可以通过以下方式与 ViewModel 耦合Datatemplating。例如将其添加到资源中App.Xaml:

<DataTemplate DataType="{x:Type local:Step1ViewModel}">
     <Step1View />
</DateTemplate>
<DataTemplate DataType="{x:Type local:Step2ViewModel}">
     <Step2View />
</DateTemplate>

你的 viewModel 应该对视图一无所知。代表着WizardVM应该 仅公开其他 viewModel,但不公开视图。这是 MVVM 的经验法则。

UPDATE2糟糕,我忘了 Silverlight 还没有 DataTemplate。在 silverlight 中,我仍然会公开 ViewModel,但将它们绑定到ContentPresenters使用转换器将视图模型转换为相应的视图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Silverlight 和 MVVM 设计复合视图和视图模型? 的相关文章

  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • MySQL查看数据是否为NULL

    我需要在 Select 中放置一个 Case 来检查我添加到视图中的数据是否为 NULL 在这种情况下我希望它只输入零 或者不输入零 你的意思是这样的吗 SELECT IF field IS NULL 0 field 还有 IFNULL S
  • Navicat 中的 MySQL 视图 - 如何定义“主键”?

    当我在 Navicat 中定义视图时 经常会收到以下消息 xxx 没有主键 对此表的更新将使用以下伪语句完成 UPDATE xxx SET ModifiedFieldsAndValues WHERE AllFieldsAndOldValue
  • WriteableBitmapEx GetPixel() 返回错误值

    我需要组合来自两个 WriteableBitmap 对象的两个颜色值并用它们计算一些内容 因此 我在第一个对象上运行 ForEach 循环 并将其颜色值和第二个对象的颜色值解析为方法 writeableBitmap ForEach x y
  • Silverlight 浏览器外应用程序不会使用 MainWindow.Close 方法关闭

    我有 Silverlight 5 1 10411 0浏览器外 http msdn microsoft com en us library dd550721 28v vs 95 29应用程序是不被信任 http msdn microsoft
  • 如何在运行时修改Silverlight模板?

    我有一个自定义控件 其中包含具有模板化工具提示的路径 我希望能够在运行时获取对模板中网格的引用 以便我可以根据使用情况修改它的子项 我认为我可以使用 GetTemplateChild 从控件的 OnApplyTemplate 方法中获取对模
  • WPF (MVVM) 菜单中的互斥(且可绑定)复选框

    我试图找到一个在 WPF MVVM 应用程序的菜单中使用复选框的示例 该应用程序可以绑定到底层 ViewModel 类中的枚举 我有一个简单的例子 public class MyViewModel public MyViewModel co
  • Silverlight 套接字:模仿框架 Bind、Listen 和 Accept 方法?

    我有这个 NET Framework C 类 它实际上充当 TCP 连接的包装器Socket http msdn microsoft com en us library attbb8f5 aspxSystem Net Sockets 命名空
  • Django:登录用户并在同一页面上刷新而不定义模板?

    我正在尝试使用引导下拉登录表单来让用户登录 我可以对我的用户名和密码进行硬编码并进行身份验证 但我试图在不进入登录屏幕的情况下让用户登录 这是我的代码 模板 我使用操作来调用 logUserIn url 以便表单可以发布到该视图 ul cl
  • silverlight...使用相对路径的文件超链接按钮

    我正在尝试使用 silverlight 中的超链接按钮来使用户能够下载 Word 文档 我不在乎是否出现文件 另存为框或单词文档是否在新浏览器中打开 我收到错误 无法导航到相对于页面的位置 我已经看到它发布 您可以使用绝对路径 www do
  • Breeze.js 查询不更新淘汰赛视图

    我正在通过 Breeze js 查询数据 第一次运行良好 第二次视图未更新 html a Order by Newest a a Order by Score a div ul li strong span span strong span
  • 在视图中获取路线名称

    我尝试设计导航菜单 我有 3 个这样的项目 仪表板 Pages List Add Articles List Add 现在我想大胆Pages当用户处于此部分时 如果在Add页面我都想要粗体Pages and Add my routes ph
  • android 选项卡小部件内列表视图中的滑动事件

    我创建了一个显示列表视图的活动 并且在滑动操作时使用 ViewFlipper 显示另一个列表 代码附在下面 import android app Activity import android os Bundle import androi
  • 从 Silverlight 中的文件夹加载资源“.resx”

    我有一个多语言应用程序 客户想要按照他的意愿编辑 Resources resx 文件 我创建了 silverlight 项目并添加了一些文件 资源 resx 资源 en US resx1 资源 uk UA resx2 他们都有构建操作 嵌入
  • Android 滚动视图未填充父视图

    我有以下包含滚动视图的布局 屏幕尺寸大于 4 8 英寸左右后 视图底部会出现白色区域 当我将滚动视图指定为 fill parent 时 为什么会出现这种情况 提前致谢 请注意 在下面的屏幕截图中 您看不到菜单下方的空白区域 因为它是白色的
  • 使用 Rx 简化异步 Silverlight Web 服务请求

    我已经使用 Rx 为我的 WCF Web 服务编写了一个简化的 Silverlight 客户端库 但是我注意到有时我会丢失已完成的事件 public IObservable
  • 如何在Xamarin.Forms中将多个页面的BindingContext设置为同一个ViewModel?

    我是 Xamarin Forms 新手 我想使用 MVVM 模式和 XAML 创建一个跨平台应用程序 在我的表单项目 pcl 中 我想设置绑定上下文 of my MainPage以及将来的多个页面到同一个 ViewModel 这可能吗 让我
  • 控制不同的DataContext

    控制WPF中不同的DataContext 因为我可以在不同的选项卡中部署多个 DataContext 并控制当前的 DataContext 我在用着Mvvm Light WPF4我有不同的 ViewModels View 但我不知道如何处理
  • 带有 ObservableCollection 和动态过滤器的 Silverlight ListBox

    假设我有这门课 public class MyData public bool IsActive get set public String Data1 get set public String Data2 get set and an
  • 在Android中绘制带有曲线底部的矩形视图

    美好的一天 我想画一个矩形作为视图 但底部应该是弯曲的 我不想应用这样的背景图像或使用任何视图 因为如果我使用视图并设置背景 曲线部分仍然会有不可见的空白空间 我将无法将另一个曲线图像附加到自定义视图的底部曲线 那么我该如何绘制一个带有底部

随机推荐