【发布时间】:2011-08-19 04:29:18
【问题描述】:
很抱歉问了一个很宽泛的问题,但我在思考如何解决这个问题时遇到了麻烦。
我有一个多对多的关系:
Product 1 --- * ProductCategory * --- Category
类别也有:
Category 0..1 --- * Category (As SubCategories)
我希望看到包含所有类别的树视图,并且能够选中复选框以创建 ProductCategory 实体。我不知道如何使用 MVVM 来解决这个问题。
在 ASP.NET 中,当呈现树视图时,我会检查我正在呈现的节点的 CategoryId 是否在我的“ProductCategory”列表中,如果是,我会选中该框,因此设置初始状态。
然后我会将事件处理程序附加到节点(可能还有一些数据),以便在选中/取消选中复选框时,它会从我的列表中添加/删除适当的实体。
问题是我正在尝试转向 MVVM,有时会看到它到底有什么帮助,虽然有些事情更整洁,但做任何复杂的事情似乎都很痛苦!例如,我最初的想法是将顶级类别(根)绑定到树,并使用 HierarchicalDataTemplate 渲染所有实体:
<sdk:TreeView Margin="0,3,30,3" ItemsSource="{Binding Categories}" Height="300">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding SubCategories}">
<StackPanel Orientation="Horizontal">
<CheckBox></CheckBox>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Left"></TextBlock>
</StackPanel>
</sdk:HierarchicalDataTemplate>
<!---->
</sdk:TreeView.ItemTemplate>
问题是我无法将我的复选框绑定到任何东西,因为 Category 没有我可以用来将其附加到产品的字段...
请一位 MVVM 专家对此有所了解,还是我应该简单地走“事件”路线?
非常感谢。
【问题讨论】:
-
您好,如何为您的 Category 创建 IsSelected 属性,并将 CheckBox 的 IsChecked 绑定到它。那么您可以将所有选定的类别附加到您的产品中吗?
-
我不想将仅用于视图的东西添加到我的实体中,这看起来不像是 'MVVM' 方式。
-
我认为 Xin 的意思是你可以将它添加到你的虚拟机中
标签: silverlight mvvm mvvm-light silverlight-toolkit