[英]Looking for guidance for where to put some code in a WPF MVVM application
第一次尝试MVVM,寻找明确放置代码的位置。
我的主视图需要绑定到一个包含1到多个UserControls的列表。
列表是否存在于ViewModel或Model中? 从我正在阅读的内容来看,模型通常包含View通过ViewModel绑定的属性。 我没有看到它如何工作,模型不需要知道UserControls列表是一个View(UserControl)的列表,我可能会比需要更难,但我仍然包装我的想法应放在代码的位置,我想了解它。 感谢您提供任何指导,或者如果我没有自我解释,请告诉我。
您的UserControls
应该有一个ViewModel(我们现在称之为ItemViewModel
)。
您的MainViewModel应该有一个ObservableCollection<ItemViewModel>
。
然后你的视图应该有一个ItemsControl
(或其衍生产品,如ListBox
), ItemsSource
属性将绑定到ObservableCollection
。 然后ItemsControl
应该定义一个包含UserControl
的ItemTemplate
。
这是使用WPF / MVVM进行描述的正确方法。
示例(伪代码):
MainViewModel:
public class MainViewModel
{
public ObservableCollection<ItemViewModel> Items {get;set;}
}
的MainView:
<Window>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<my:UserControl/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
请记住, UserControl
每个实例都将其DataContext
设置为源集合中的相应项。
因此,如果您的ItemsViewModel看起来像这样:
public class ItemsViewModel
{
public string LastName {get;set;}
public string FirstName {get;set;}
//INotifyPropertyChanged, etc.
}
您的UserControl
可以像这样定义:
<UserControl>
<StackPanel>
<TextBox Text="{Binding LastName}"/>
<TextBox Text="{Binding FirstName}"/>
</StackPanel>
</UserControl>
您不应该需要UserControl列表。 您可能拥有的是View绑定到ViewModel中的项目列表。 例如,创建一个ListBox并将其ItemsSource设置为ViewModel的列表。
要为每个项创建用户控件,您需要为列表中的类型创建一个DataTemplate并指定UserControl,并且可以将该usercontrol中的任何绑定赋予该项。
然后,ListBox将使用DataTemplate为列表中的每个项创建UserControl。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.