很抱歉只提出一个广泛的问题,但我无法思考如何解决这个问题。
我有很多关系:
Product 1 --- * ProductCategory * --- Category
类别也有:
Category 0..1 --- * Category (As SubCategories)
我希望看到包含所有类别的树视图,并且能够选中复选框以创建ProductCategory实体。我不知道如何使用MVVM来解决这个问题。
在ASP.NET中,当渲染树视图时,我会检查我正在渲染的节点的CategoryId是否在我的“ProductCategory”列表中,如果是,我会选中该框,然后设置初始化状态。
然后我会将事件处理程序附加到节点(可能还有一些数据),这样当选中/取消选中复选框时,它会从我的列表中添加/删除相应的实体。
问题是我正在努力向MVVM迈进,有时候看到它有多么有用,虽然有些东西更整洁,做任何复杂的事情似乎都很痛苦!例如,我的初衷是将顶级类别(Root)绑定到树上,并使用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大师能不能对此有所了解,还是应该沿着“事件”路线走下去?
非常感谢。
答案 0 :(得分:0)
一种方法是将IsChecked属性添加到类别viewmodel,然后将其绑定到复选框。当它的get设置为true时,viewmodel可以调用where。例如,它可以将自己的产品名称添加到另一个控件的过滤器集合中。
mvvm模式的一个强大之处在于视图模型可以引用彼此或其他内容,并且还具有您不希望放入实际实体中的属性