【问题标题】:Dynamically adding Views in Silverlight & MVVM在 Silverlight 和 MVVM 中动态添加视图
【发布时间】:2010-05-12 14:44:46
【问题描述】:

我开始用 MVVM 模式重写我的整个 silverlight 业务应用程序; 我的第一站是:

我有一个带有相应 ViewModel1 的页面 (View1)(具有属性“IEnumerable AllData”);

现在,在这个视图中,我想要一个树视图控件,其中一个节点将被另一个 View2 填充;

我的问题是: 1. 怎么做? - 我无法遍历 AllData 属性,因为它是异步加载的... - 因此我不知道要插入的 View2s 的数量 - 我不知道如何从 ViewModel1 做到这一点:(

  1. 是否需要带有属性“MyDataEntity CurrentData”的 ViewModel2?
    • 或者我可以从 ViewModel1 绑定到 AllData 属性

你能帮帮我吗?

谢谢

【问题讨论】:

  • ViewModel2 需要访问 AllData 还是只需要访问一个特定项?
  • ViewModel2 只需要 AllData[index],它是 MyDataEntity 的一个实例,需要与 View2 控件绑定;问题是,我需要以某种方式遍历 AllData 并生成/附加与 AllData IEnumerable 中的成员一样多的 View2 控件

标签: silverlight mvvm mef


【解决方案1】:

听起来您正在尝试将主/详细视图放在一起?其中 MasterView 包含所有 DetailView 的 TreeView。

所以 ViewModel 看起来像

public class DataListViewModel
{
    public DataDetailViewModel[] AllData {get;}
}

public class DataDetailViewModel
{
    public Data Model {get;}
    public DataListViewModel Parent {get;}
}

如果这或多或少准确,那么您前面的路很容易,您需要做的是首先选择 View 或 ViewModel。

使用 View 的第一选择,您可以将 DataTemplate 用于控制 TreeViews 项的 TreeView。

<DataTemplate x:Key="dataTemplate">
  <my:DataDetailView DataContext="{Binding Path=.}" />
</DataTemplate>

只要确保你的 View 有一个默认的构造函数。

使用 ViewModel 作为首选,您需要使用 TemplateSelector 来根据设置的对象提取正确的视图。这可能是最灵活的,因为您可以根据 Detail 类使用不同的视图。

查看链接了解更多信息http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2011-01-20
    • 2016-06-11
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多