【发布时间】:2014-07-21 10:10:04
【问题描述】:
我有多个视图(用户控件),每个视图都有自己的ViewModel。为了在它们之间导航,我使用了按钮。按钮显示来自相应视图模型的图像和文本,还需要列和行(因为大约有 10 个视图:10 列,每列具有不同的行数)。
现在按钮是动态创建的(我为此做了一个Navigator 控件),对于视图模型,我有一个基类来保存文本、图像、列和行。可用的视图数量会有所不同(取决于用户级别和某些设置),这就是我需要在这里控制的原因。
问题:我的控件如何从视图模型中获取数据?
现在我有接口INavigator,在(lol)控件本身中定义。视图模型实现了它。我可以相反,让我的控件了解视图模型。两者看起来都错了。
有一个Navigator 控制绑定到视图模型列表的Items。它可以将每个视图模型转换为INavigator 或ViewModelBase(所有页面通用)以获得特定的视图模型图像、文本、列和行。所以要么视图模型知道控制(实现INavigator),要么控制知道ViewModelBase..这是一个问题,解决方案都绑定了严格的控制和视图模型,这在mvvm中是不好的。
示意图
【问题讨论】:
-
好吧,如果我明白了,你有某种容器,里面有很多用户控件。我现在的问题是您需要与那些 UserControl 进行什么样的交互?
-
@TzahMama,这与问题有什么关系?它们将是复杂的用户控件,充满了绑定到相应视图模型属性的不同控件(例如,图形、列表、按钮等)。我的问题是(尽量简单地说):视图模型列表和分别从 each 视图模型获取数据。当然,我可以列出图像,这样我就不必投射任何东西了。但这更加不专业,而不是让单个实体列表为实体的每个重要属性创建一堆列表。现在是 4 个,如果我需要 40 个呢?
-
就是这样,我无法理解您的问题。我将建议
Custom Routed Events以一种优雅的方式检测用户控件中发生的某事。但我认为您只想从 ViewModel 中获取任意信息。如果是这种情况,我看不到任何其他方法,只是迭代它们以提取您想要的数据。是的,它并不优雅,但我没有看到任何其他方式(界面可能会有所帮助) -
@TzahMama,那么您可能还想知道在这种情况下该怎么做 =D 点是 - 将控制和 ViewModel 耦合在一起是不好的。随意投票,也许一些 mvvm-sharks 会闻到它。
-
这听起来对我来说很复杂,但让我试着解释一下:你有一堆
Views(未定义的数字),你有相同数量的VM。现在要在它们之间导航,您有基本的Properties和Image和Text。您使用哪种Control来显示这种情况,即您使用什么来显示视图?